約 4,405,929 件
https://w.atwiki.jp/nicocacheu/pages/46.html
Linuxで Debian GNU/Linux 5.0に導入する Ubuntuに導入する 起動時にNicoCache_uも起動させる Debian GNU/Linux 5.0に導入する javaインストール (apt-lineにnon-freeを含めておく) $ aptitude install sun-java6-jre unzipインストール $ aptitude install unzip NicoCache_uを[[ダウンロード]]して展開 $ unzip NicoCache_u-xxx.zip シェルスクリプトに実行権限を与える $ cd NicoCache_u $ chmod u+x startup.sh shutdown.sh NicoCache_uを起動 $ ./startup.sh NicoCache_uを終了 $ ./shutdown.sh ログを確認 $ view log/info.log ログを追跡表示(Ctrl + c で終了) $ tail -fn 20 log/info.log [補足] Ubuntuの端末からでも、同様のコマンドで導入できます。 ただしsudoが必要な場合があります。 起動時にNicoCache_uも起動させる 1. 以下の起動スクリプトを修正 USERをNicoCache_uを起動するユーザに変更(通常はログインしているユーザ) NICOCACHEU_HOMEをNicoCache_uを配置したディレクトリパスに変更 2. 修正した起動スクリプトを/etc/init.d/に配置 ファイル名はnicocache_uとする 3. 起動スクリプトに実行権限を付与 $ chmod a+x /etc/init.d/nicocache_u 4. 起動スクリプトのシンボリックリンクを作成 $ update-rc.d nicocache_u defaults 99 1 [補足] Debian GNU/Linux、又はUbuntuのみ 起動スクリプト #!/bin/sh ### BEGIN INIT INFO # Provides nicocache_u # Required-Start $remote_fs # Required-Stop $remote_fs # Default-Start 2 3 4 5 # Default-Stop 0 1 6 # Short-Description NicoCache_u initscript # Description This file should be used to construct scripts to be # placed in /etc/init.d. ### END INIT INFO USER=test NICOCACHEU_HOME=/home/test/NicoCache_u case "$1" in start) su $USER -c "$NICOCACHEU_HOME/startup.sh" ;; stop) su $USER -c "$NICOCACHEU_HOME/shutdown.sh" ;; restart|force-reload) su $USER -c "$NICOCACHEU_HOME/shutdown.sh" sleep 3 su $USER -c "$NICOCACHEU_HOME/startup.sh" ;; *) ;; esac
https://w.atwiki.jp/foxeye/pages/22.html
内容はUbuntuの場合が多い。 Vi関連 シェルスクリプト 便利そうなコマンドやコマンドの組み合わせの覚書ある文字列を含むコマンドがあるかどうか調べたい yum searchの結果からパッケージ名にキーワードが含まれている項目のみ抜き出す キーボードのキーコードを調べたい lessで現在開いているファイルを最新の情報にしたい teeコマンドで標準エラー出力もファイルに書き込みたい ログアウトした後もコマンドを実行し続ける MACアドレス通信相手のMACアドレスを調べる MACアドレスからネットワーク機器の製造元ベンダを調べる NICのチップセットを調べる 拡張子だけが違う同一名のファイルを拡張子はそのままに一度にファイル名を変更したい lsの結果を各ファイルごとにフルパスで欲しい gnuplot関連線種のサンプルを表示 tgif関連jpegとかをimportできないとき 設定ファイル scim+anthyで漢字変換ができなくなるバグバグが発生した状況 対処方法 その他 64bit版Ubuntu9.04をインストールしてから使える状態にするまでの記録ネットワーク最初に IPの設定 NFSの設定 NISの設定 64bit版UbuntuのfirefoxでFlash Playerを動作させる32bit版を導入してラッパーをかませる方法 64bit版(非公式?)を使用する方法 64bit版UbuntuにOperaを導入する Athena Widget関連ライブラリ CentOS5でyum updateをしたときのトラブル対策なんかパッケージのダウンロードが異常に遅い yum updateしたらpackageがconflictsしてるとか言われてerrorで止まる yumのデータベースが壊れた?とき マザーボードの温度・電圧・ファン回転数を計測する Ubuntu9.04から9.10にアップグレードしたときの記録VMwarePlayerのマウスポインタの不具合 /etc/fstabのマウントオプションautoについて Alt+Shift+Tabの挙動について Vi関連 別ページへ シェルスクリプト Windowsで作成した数値データのテキストファイルを,Linuxでシェルスクリプトを使って 処理しようとしてたら,exprで数値として認識してくれず演算できなかった。 散々調べたり考えた結果,改行コードが原因っぽい。 WindowsはCR+LF,UNIX/LinuxはLF,MacはCRなので,exprではCRを数値ではないと認識してたみたい。 lessやらviで見ても違いが分からないんで厄介だった。 バイナリエディタで見るとよくわかった。 それで変換は, $tr -d '\r' input_file output_file ちなみに,改行コードの確認は $od -c text_file あと,その時初めて使ったバイナリエディタのbviがviライクでいい感じだった。 便利そうなコマンドやコマンドの組み合わせの覚書 ある文字列を含むコマンドがあるかどうか調べたい find `echo $PATH | sed s/ /" "/g` -name "*set*" これはsetを含むコマンドを探したい場合。 パスが通っているディレクトリの中から探すので,一般ユーザだと/sbinとかの中は探してくれない。 yum searchの結果からパッケージ名にキーワードが含まれている項目のみ抜き出す yum search bind | cut -d' ' -f1 | grep bind 上記の例はbindをパッケージ名に含む項目を抜き出す場合 キーボードのキーコードを調べたい xev lessで現在開いているファイルを最新の情報にしたい R teeコマンドで標準エラー出力もファイルに書き込みたい ただしbashの場合の話,tcshは無理だったと思う(要調査) 例えばmakeの場合 make 2 1 | tee make_log.txt ちなみに画面には標準出力と標準エラー出力,ファイルには標準エラー出力のみを出力したい場合は make 3 1 1 2 2 3 |tee make_error_log.txt ログアウトした後もコマンドを実行し続ける あんまり使わないから,いざ使いたいときに大抵忘れてるんでメモしておく nohup command [arg] argはcommandの引数。 MACアドレス 通信相手のMACアドレスを調べる あらかじめ相手とpingなどで通信を行ったあと, arp 相手のIP で調べられる。 MACアドレスからネットワーク機器の製造元ベンダを調べる MACアドレスの上位24bitはハードウェアベンダを示しており,以下のサイトで検索するとどのベンダの製品化が分かる。 IEEE OUI and Company_id Assignments NICのチップセットを調べる lspci dmesgから探すという手もある。 拡張子だけが違う同一名のファイルを拡張子はそのままに一度にファイル名を変更したい for i in `ls inuputfile.*`;do mv ${i} outputfile.`echo ${i} | cut -d '.' -f 2`; done lsの結果を各ファイルごとにフルパスで欲しい どうやらlsコマンドのオプションでは提供されていないようで,findコマンドを用いて以下のようにやる。 find /home/user/ -maxdepth 1 -mindepth 1 上記はuserのホームディレクトリ内のファイル・ディレクトリのみをフルパスで表示する。 gnuplot関連 線種のサンプルを表示 gnuplot test tgif関連 jpegとかをimportできないとき ubuntu8.04の場合だが、 netpbm と libjpeg-progs のパッケージをインストールするとできるようになった。 libなんとかをインストールすれば,他の画像もimportできるかも(未検証) 設定ファイル /etc/X11/app-defaults/Tgif に設定が書いてある。あと,上記ファイルのTgif.IconPixmap でアイコンが指定されており,デフォルトでは /usr/share/tgif/ にxpmファイルが置いてある。 scim+anthyで漢字変換ができなくなるバグ 日本語入力システムとしてscim+anthyを使用しているときに、漢字変換ができなくなるバグについて。 バグが発生した状況 バグの状況 日本語を入力するために漢字変換を行おうとすると発生。半角スペースが入力され、右側に変換しようとしていたひらがなが残ったまままscimが死亡。ターミナル他sylpheedやfirefoxでも起こった。変換前のひらがなの状態で入力を確定すればバグは発生しない。Xの再起動、マシンの再起動を行ってもバグは発生した。 日時 2008年4月22日夕方くらい バグが発生したマシンの環境 OS VineLinux4.2(VMware上) インプットメソッド(IM) scim 日本語入力システム anthy 原因 不明。前触れなく突然起こった。 対処方法 ホームディレクトリの ./anthy を削除して、anthyを立ち上げなおしたら直った。ただ、原因はまだ不明。 その他 scim+anthyで「るいヴぃとん」と入力し変換しようとすると、上記のバグが発生する。ただし、こちらは「るいヴぃとん」と入力したプロセスのみでしか起こらない。他のプロセスでは通常通り変換できる。 64bit版Ubuntu9.04をインストールしてから使える状態にするまでの記録 ネットワーク 最初に どういうわけかインストール時に作成したユーザは,ネットワークを使用できないように設定されていた。(インストール時の設定が悪かっただけかもしれないが) 以下の操作で解除する。 上パネルのシステム→システム管理→ユーザとグループ→(作成したユーザの)プロパティ→ユーザの権限→有線及び無線ネットワークに接続できるのチェックボックスにチェックを入れる ※ユーザのプロパティに変更を加えるにはロックを解除する必要がある。 IPの設定 /etc/network/interfaces に設定を書く。以下サンプル。 auto lo iface lo inet loopback iface eth0 inet static address 123.45.67.89 netmask 255.255.255.0 gateway 123.45.67.1 auto eth0 あとは /etc/init.d/networking restart で多分大丈夫。 NFSの設定 デフォルトではnfsのクライアントは入っていないので, apt-get install nfs-common で導入後, /etc/fstab に必要な情報を追記しておく。 nfsserver /commondir /nfsdir nfs rw,hard,intr 0 0 例えばこんな感じ。マシン名,ディレクトリ名は適当に。optionにnoautoを加えると自動でマウントをしないようになる。 NISの設定 NISもNFS同様デフォルトでは入っていないので,まずインストールする。 apt-get install nis インストール中にNISのドメイン名を設定しなければならない。ネットワーク管理者に聞くか,すでにNISが導入されているマシンで nisdomainname または ypdomainname とコマンドを打つか,Ubuntu 9.04の場合 /etc/defaultdomain を,CentOS 5の場合 /etc/sysconfig/network を見れば記述されている。 次に /etc/nsswitch.conf を編集する。passwd ,group ,shadow ,services の各項目の最後にnisを追加していく。例えば以下のようにする。 passwd compat nis 64bit版UbuntuのfirefoxでFlash Playerを動作させる 32bit版を導入してラッパーをかませる方法 下記のページのコメント欄参照 http //ubuntu.livedoor.biz/archives/64539867.html 手順の部分を引用すると http //janvitus.interfree.it/ubuntu/index.html ここのリポジトリを追加して sudo apt-get install ia32-libs ia32-libs-gtk linux32 lib32asound2 nspluginwrapper gsfonts-x11 http //www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash ここからinstall_flash_player_9_linux.tar.gzをダウンロードして解凍。 libflashplayer.soとflashplayer.xptを/usr/lib/firefox/pluginsにコピー, となる。 64bit版(非公式?)を使用する方法 サイトhttp //labs.adobe.com/downloads/flashplayer10.htmlから libflashplayer-10.0.22.87.linux-x86_64.so.tar.gz をダウンロードしてきて展開する。 libflashplayer.so というファイルができるので /usr/lib/mozilla/plugins に置く 64bit版UbuntuにOperaを導入する http //jp.opera.com/ からダウンロードしようとすると,x86_64を選択しても何故かi386用のファイルがダウンロードされるので(2008年6月23日時点) http //www.opera.com/ からダウンロードする。 Athena Widget関連ライブラリ libxaw-headers libxaw7 libxaw7-dev このあたりを入れておけば大丈夫だろう。 CentOS5でyum updateをしたときのトラブル対策 なんかパッケージのダウンロードが異常に遅い デフォルトで接続されるupdate serverだと膨大な時間がかかってしまうので yum install yum-fastestmirror を最初にやっておいて速いサーバから落としてくるようにする。 yum updateしたらpackageがconflictsしてるとか言われてerrorで止まる 2009/6/17にyum updateしたら Error python-devel conflicts with python 2.4.3-24.el5 と言われて失敗。 ググってみたところ http //d.hatena.ne.jp/yokkuns/20090421/1240319175 で同じ現象が起きている人を発見。 上記のページによると, # rpm -qa python python-2.4.3-21.el5 python-2.4.3-24.el5 でわかるように新旧パッケージが混在していることが原因らしい。 そこで, # yum remove python-2.4.3-21.el5 で古い方を削除してやる。 その上でyum updateを実行すると,今度は Transaction Check Error file /sbin/mkinitrd from install of mkinitrd-5.1.19.6-44 conflicts with file from package mkinitrd-5.1.19.6-28 file /sbin/new-kernel-pkg from install of mkinitrd-5.1.19.6-44 conflicts with file from package mkinitrd-5.1.19.6-28 file /usr/share/man/man8/mkinitrd.8.gz from install of mkinitrd-5.1.19.6-44 conflicts with file from package mkinitrd-5.1.19.6-28 というerrorが発生したので,前と同じ要領でmkinitrdの古いversionをremoveする。 これでyum updateも無事完了した。 yumのデータベースが壊れた?とき yum clean all でデータベースを初期化できる。 マザーボードの温度・電圧・ファン回転数を計測する # apt-get install lm-sensors で関連パッケージとともにインストールする。 # sensors-detect でセットアップを行う。 基本的にEnter連打でOK。 マザーボードによってはセンサーが見つからないこともある。 $ sensors で温度などの情報を見ることができる。 Ubuntu9.04から9.10にアップグレードしたときの記録 不具合が多いと話題の9.10だが,報告されているようなHDDが認識されないとか画面出力が全くされないとか, そういった致命的な不具合は幸い自分の環境では発生していない。 しかし細かな不具合(と言うよりは仕様変更?)があったので記録しておく。 VMwarePlayerのマウスポインタの不具合 VMwarePlayerのバージョンは2.53で,ゲストOSはWindowsXPpro。 症状は,マウスポインタが(VM中の)画面左上640*480くらいの領域でしか正常に動作しないというもの。 VMwarePlyaer3.0にアップグレードしたら治った。 原因は調べていないし,VMも2.53を再インストールするだけでも良かったかもしれない。 記録しておくほどの情報でもない気もするが一応。 /etc/fstabのマウントオプションautoについて nfsのファイルシステムを起動時にマウントするように記述していたのだが, 9.04までではマウントオプションにautoを記述していなくても起動時に自動でマウントしていた。 それが9.10(というよりはmountの仕様が変わったのかも...)からは記述が無い場合の動作がnoautoになったようである。 2009/11/11追記 マウントオプションにautoと明記していても自動でマウントしなかった。 要調査 2009/11/25追記 本日アップデートを行ったところ,問題は解消されていた。 2010/1/7追記 書くのが遅くなったが,12月の頭にはまた自動でマウントされなくなっていた。 2010/1/8追記 とりあえず対症療法的な対策。上のメニューバーから, システム- 設定- 自動起動するアプリ で「自動起動するプログラム」タブで「追加」ボタンを押す。 そして,コマンドの欄に mount デバイス or マウントポイント を書く。ここを見ているということは,fstabにNFSマウントの設定が書いてあるはずなので,それを前提に上記は書いている。 それと,fstabのNFSマウントの部分にuserオプションを追加しておいた。 これは未検証だが,恐らく必要なんじゃないかなぁと思っている。 Alt+Shift+Tabの挙動について Ubuntu 9.10に限った話ではないのだが,デフォルトのUbuntuでは,Alt+Tabでwindowの切り替えはできるが,Alt+Shift+Tabで逆順に切り替えができなかった。 その設定の変更方法を調べて分かったので記録しておく。 Ubuntu 9.10の場合, システム- 設定- キーボード- 「レイアウト」タブ- 「レイアウトのオプション」ボタン と進んでいき, Key(s) to change layout グループを開く。デフォルトではこの中の「Alt+Shift」のチェックボックスにチェックが入っていたのでチェックを外す。この方法でいけた。 Ubuntu 7.10の場合,レイアウトオプションの中のグループがGroup Shift/Lock behaviorで, Alt-Shift chages groupのチェックを外すらしい。ここのページ参照- http //astro3.sci.hokudai.ac.jp/wiki/index.php?kat%2FComputer%2FLinux%2FUbuntu ちなみに,Key(s) to change layout (Group Shift/Lock behavior)は日本語キーボートと英語キーボードのレイアウトを行き来する場合などに使うっぽい。 ここのページ参照- https //forums.ubuntulinux.jp/viewtopic.php?id=1139 私もVineLinux4.2を使っていて同じように日本語変換が出来なくなりました。 原因不明ですが、頻発するのが気持ち悪いので別のLinuxを試そうか悩んでいます。 -- とおりすがり。 (2008-08-03 21 51 42) 「NICのチップセットを調べる」は「lspci | grep Ethe」とかの方がいいと思います。 -- 名無しさん (2010-12-25 01 46 09) http //xn--pckuae6an0k0e9b.biz/ -- テレホンセックス (2011-01-05 13 27 27) 騎乗位だけで月100万(人・ω・)♂ http //ylm.me/index.html -- ぷぅにゃん (2011-11-29 18 35 39) 名前 コメント このページを編集
https://w.atwiki.jp/linux_kai/pages/14.html
Total - (Today - Yesterday - ) 最終更新日 2010/08/21 06 49 当然ながらインストールなどすべての作業は 自己責任でお願いします。 1.XLinkKaiインストール1.1.kaiengineインストール 1.2.ShiftJIS言語環境の登録 1.3.設定ファイル用ディレクトリ作成 1.4.シェルスクリプト作成 1.5.WebUIカスタムスキンのインストール 2.Kai設定2.1.Kaiの初回起動とKai設定 2.2.Kaiのよくあるエラー 2.3.Kai設定後のファイル コメント 1.XLinkKaiインストール 1.1.kaiengineインストール XLink Kai 7.4 for Linux (x86) をダウンロードします。 $ cd ~/Downloads $ wget http //www.teamxlink.co.uk/binary/kaiEngine-7.4.18-linux-x86.tgz 圧縮ファイルを解凍して、実行ファイルをコピーします。 $ tar zxvf kaiEngine-7.4.18-linux-x86.tgz $ sudo cp kaiEngine-7.4.18/kaiengine /usr/local/bin/ $ sudo chown root.root /usr/local/bin/kaiengine ライブラリが不足していないか確認します。"not found"になっているライブラリが不足してます。 $ ldd /usr/local/bin/kaiengine linux-gate.so.1 = (0x0088b000) libwx_gtk2u_richtext-2.8.so.0 = not found libwx_gtk2u_aui-2.8.so.0 = not found libwx_gtk2u_xrc-2.8.so.0 = not found libwx_gtk2u_qa-2.8.so.0 = not found libwx_gtk2u_html-2.8.so.0 = not found libwx_gtk2u_adv-2.8.so.0 = not found libwx_gtk2u_core-2.8.so.0 = not found libwx_baseu_xml-2.8.so.0 = not found libwx_baseu_net-2.8.so.0 = not found libwx_baseu-2.8.so.0 = not found libstdc++.so.6 = /usr/lib/libstdc++.so.6 (0x003c6000) libm.so.6 = /lib/tls/i686/cmov/libm.so.6 (0x007dc000) libgcc_s.so.1 = /lib/libgcc_s.so.1 (0x00313000) libpthread.so.0 = /lib/tls/i686/cmov/libpthread.so.0 (0x00ed6000) libc.so.6 = /lib/tls/i686/cmov/libc.so.6 (0x005ce000) /lib/ld-linux.so.2 (0x00d62000) kaiengineに必要なwxGTKライブラリをインストールします。ディストリビューションごとにライブラリの追加の仕方が違ってきます。 ubuntu 32-bit版の場合 $ sudo apt-get install libwxbase2.8-0 libwxgtk2.8-0 ubuntu 64-bit版の場合、手間が掛かります。設定内容は「ubuntu amd64 kai設定編」にまとめました。 debianの場合、ubuntuの場合と同様です。 fedoraの場合、手間が掛かります。設定内容は「fedora kai設定編」にまとめました。 slackwareの場合 $ su - # sbopkg -i wxGTK # exit $ 再度、ライブラリが不足していないか確認します。”not found"が出てなければOKです。 $ ldd /usr/local/bin/kaiengine linux-gate.so.1 = (0x00ef0000) libwx_gtk2u_richtext-2.8.so.0 = /usr/lib/libwx_gtk2u_richtext-2.8.so.0 (0x00b7c000) libwx_gtk2u_aui-2.8.so.0 = /usr/lib/libwx_gtk2u_aui-2.8.so.0 (0x00110000) libwx_gtk2u_xrc-2.8.so.0 = /usr/lib/libwx_gtk2u_xrc-2.8.so.0 (0x00279000) libwx_gtk2u_qa-2.8.so.0 = /usr/lib/libwx_gtk2u_qa-2.8.so.0 (0x00d71000) libwx_gtk2u_html-2.8.so.0 = /usr/lib/libwx_gtk2u_html-2.8.so.0 (0x006cf000) libwx_gtk2u_adv-2.8.so.0 = /usr/lib/libwx_gtk2u_adv-2.8.so.0 (0x0017f000) libwx_gtk2u_core-2.8.so.0 = /usr/lib/libwx_gtk2u_core-2.8.so.0 (0x0030b000) libwx_baseu_xml-2.8.so.0 = /usr/lib/libwx_baseu_xml-2.8.so.0 (0x0023d000) libwx_baseu_net-2.8.so.0 = /usr/lib/libwx_baseu_net-2.8.so.0 (0x00248000) libwx_baseu-2.8.so.0 = /usr/lib/libwx_baseu-2.8.so.0 (0x0076b000) libstdc++.so.6 = /usr/lib/libstdc++.so.6 (0x008b8000) libm.so.6 = /lib/tls/i686/cmov/libm.so.6 (0x00a0a000) libgcc_s.so.1 = /lib/libgcc_s.so.1 (0x0066d000) libpthread.so.0 = /lib/tls/i686/cmov/libpthread.so.0 (0x0068c000) libc.so.6 = /lib/tls/i686/cmov/libc.so.6 (0x00d90000) libgtk-x11-2.0.so.0 = /usr/lib/libgtk-x11-2.0.so.0 (0x00ef1000) libgdk-x11-2.0.so.0 = /usr/lib/libgdk-x11-2.0.so.0 (0x00a74000) libatk-1.0.so.0 = /usr/lib/libatk-1.0.so.0 (0x006a5000) libpangoft2-1.0.so.0 = /usr/lib/libpangoft2-1.0.so.0 (0x009ae000) libgdk_pixbuf-2.0.so.0 = /usr/lib/libgdk_pixbuf-2.0.so.0 (0x009d5000) libgio-2.0.so.0 = /usr/lib/libgio-2.0.so.0 (0x00c62000) libpango-1.0.so.0 = /usr/lib/libpango-1.0.so.0 (0x00b0a000) libfreetype.so.6 = /usr/lib/libfreetype.so.6 (0x1f39d000) libfontconfig.so.1 = /usr/lib/libfontconfig.so.1 (0x00d30000) libgobject-2.0.so.0 = /usr/lib/libgobject-2.0.so.0 (0x18f53000) libgmodule-2.0.so.0 = /usr/lib/libgmodule-2.0.so.0 (0x00274000) libgthread-2.0.so.0 = /usr/lib/libgthread-2.0.so.0 (0x006c1000) librt.so.1 = /lib/tls/i686/cmov/librt.so.1 (0x009ef000) libglib-2.0.so.0 = /lib/libglib-2.0.so.0 (0x10def000) libXinerama.so.1 = /usr/lib/libXinerama.so.1 (0x006c7000) libSM.so.6 = /usr/lib/libSM.so.6 (0x009f8000) libpng12.so.0 = /lib/libpng12.so.0 (0x00a30000) libz.so.1 = /lib/libz.so.1 (0x00b4d000) libjpeg.so.62 = /usr/lib/libjpeg.so.62 (0x00d00000) libtiff.so.4 = /usr/lib/libtiff.so.4 (0x1c4c2000) libdl.so.2 = /lib/tls/i686/cmov/libdl.so.2 (0x006cb000) libexpat.so.1 = /lib/libexpat.so.1 (0x0de6f000) /lib/ld-linux.so.2 (0x00a57000) libpangocairo-1.0.so.0 = /usr/lib/libpangocairo-1.0.so.0 (0x00b62000) libX11.so.6 = /usr/lib/libX11.so.6 (0x06a6d000) libXcomposite.so.1 = /usr/lib/libXcomposite.so.1 (0x00a01000) libXdamage.so.1 = /usr/lib/libXdamage.so.1 (0x00a05000) libXfixes.so.3 = /usr/lib/libXfixes.so.3 (0x00b6e000) libcairo.so.2 = /usr/lib/libcairo.so.2 (0x1bb6a000) libXext.so.6 = /usr/lib/libXext.so.6 (0x00d60000) libXrender.so.1 = /usr/lib/libXrender.so.1 (0x00d21000) libXi.so.6 = /usr/lib/libXi.so.6 (0x0f935000) libXrandr.so.2 = /usr/lib/libXrandr.so.2 (0x00b74000) libXcursor.so.1 = /usr/lib/libXcursor.so.1 (0x15bef000) libpcre.so.3 = /lib/libpcre.so.3 (0x13cc1000) libresolv.so.2 = /lib/tls/i686/cmov/libresolv.so.2 (0x1b8a4000) libselinux.so.1 = /lib/libselinux.so.1 (0x1d08e000) libICE.so.6 = /usr/lib/libICE.so.6 (0x1d71c000) libuuid.so.1 = /lib/libuuid.so.1 (0x00d2b000) libxcb.so.1 = /usr/lib/libxcb.so.1 (0x0b787000) libpixman-1.so.0 = /usr/lib/libpixman-1.so.0 (0x14619000) libdirectfb-1.2.so.0 = /usr/lib/libdirectfb-1.2.so.0 (0x0fe3e000) libfusion-1.2.so.0 = /usr/lib/libfusion-1.2.so.0 (0x1e7d6000) libdirect-1.2.so.0 = /usr/lib/libdirect-1.2.so.0 (0x0d7a0000) libxcb-render-util.so.0 = /usr/lib/libxcb-render-util.so.0 (0x00eea000) libxcb-render.so.0 = /usr/lib/libxcb-render.so.0 (0x20353000) libXau.so.6 = /usr/lib/libXau.so.6 (0x19737000) libXdmcp.so.6 = /usr/lib/libXdmcp.so.6 (0x12054000) 1.2.ShiftJIS言語環境の登録 ja_JP.SJISロケールを追加します。LANG=ja_JP.SJISと指定するとKaiで日本語の読み書きができます。 $ sudo localedef -f WINDOWS-31J -i ja_JP ja_JP.SJIS ロケールを確認します。 $ locale -a | grep ja_JP ... ja_JP.sjis ← 追加されていればOKです ja_JP.utf8 ... 1.3.設定ファイル用ディレクトリ作成 ホームディレクトリにXLinkKaiディレクトリを作成します。 $ mkdir ~/XLinkKai 1.4.シェルスクリプト作成 kaiengine用のシェルスクリプトを作ります。 $ sudo touch /usr/local/bin/kaiengine.sh $ sudo chmod 755 /usr/local/bin/kaiengine.sh kaiengine.shの編集とシェルスクリプト内容 $ sudo vi /usr/local/bin/kaiengine.sh #!/bin/sh cd ~/XLinkKai sudo LANG=ja_JP.SJIS /usr/local/bin/kaiengine 1.5.WebUIカスタムスキンのインストール WebUIを便利にする機能があるスキンをダウンロードします。 $ cd ~/Downloads $ wget http //www.xlink-jp.net/software/WebUI-skin.zip 圧縮ファイルを解凍して、スキンファイルをコピーします。 $ unzip WebUI-skin.zip $ sudo cp ./WebUI-skin/jp_custom.zip ~/XLinkKai 2.Kai設定 2.1.Kaiの初回起動とKai設定 kaiengineを実行します。 $ sudo /usr/local/bin/kaiengine.sh ~/XLinkKaiディレクトリにkaiUserConfig.txtファイルが存在しないとき、ブラウザ起動後、ログイン画面が表示されます。登録済みのKaiTagとパスワードを入力してログインボタンを押下します。 XLink Kai画面が表示されたら、画面の左上隅に表示されているロゴ画像(緑色の円状のマーク)をマウスで押下して、Kai Configuration画面を表示します。 Kai Configuration画面は、パネルに表示されているXLink Kai Engineアイコンをマウスで右クリック、メニューから「設定(KaiConfiguration)」を選択することでも表示できます。このアイコンから起動するブラウザはrootで実行されることに注意してください。 Kai Configuration画面で必要な項目を設定します。 チェックをOFFにします。チェックをONにするとrootでブラウザが起動してしまいます。 Linuxが認識した無線LANアダプタのインタフェース名を選択します。#無線LANアダプタの設定を終えてから行うと良いです。 ポート開放の設定をしないでUPnPで行う場合は、"0"をポート開放を自力で設定する場合は、"30000"を指定します。#ポート開放の手順については「ポート開放編」を参照してください。 空欄で良いです。 チェックをONにします。 #各項目の意味を知りたい方は、webUI - 使い方紹介のwebUIでの設定を参照してください。 2.2.Kaiのよくあるエラー Segmentation Fault設定ファイルの内容が不完全な場合に、Segmentation faultが多発します。とくにNetworkAdapterの設定に誤りがあるときは高確率で発生するようです。Segmentation Faultが発生してKaiが起動できない場合には~/XLinkKai/kaiUserConfig.txtをテキストエディタで直接編集します。 $ sudo vi ~/XLinkKai/kaiUserConfig.txt ... # Network adapter (!=autodetect) kaiAdapter=ra0 ← Segmentation Fault多発時は真っ先にチェック ... Please wait while Kai Engine restartsKai Configurationの設定変更後にSaveボタンを押したとき、WebUI画面には"Please wait while Kai Engine restarts"と表示されますが、プロセスは再起動してくれません。/usr/local/bin/kaiengine.shを再実行してから、ブラウザで再読込してください。 2.3.Kai設定後のファイル XLinkKaiに関する最終的なファイルはこんな感じです。 /home/$USER/XLinkKai/jp_custom.zip WebUI用のスキン /home/$USER/XLinkKai/kaiEnginePersist.txt Kaiエンジンキャッシュファイル /home/$USER/XLinkKai/kaiUserConfig.txt Kaiユーザー設定ファイル /home/$USER/XLinkKai/webui.zip WebUIファイル /usr/local/bin/kaiengine Kaiエンジン本体 /usr/local/bin/kaiengine.sh Kaiエンジンシェルスクリプト このページについての指摘や情報がありましたらコメントに投稿をお願いします。 以上で主なKaiの設定は終わり。 次は、実践編です。 上へ戻る コメント 2.Kai設定 no -- wistaria (2010-07-02 00 00 21) 上は失敗.2.Kai設定 の直後にkaiengineを起動して,設定を選択することを書いた方が良い. -- wistaria (2010-07-02 00 01 33) Kai設定の箇所を修正しました -- kar (2010-07-02 18 26 30) 名前 コメント
https://w.atwiki.jp/linuxjapanwiki/pages/287.html
Alpine Linux ▲Alpine Linuxのロゴ Alpine Linuxは、muslとBusyBoxを利用して構築されているLinuxディストリビューション。 セキュリティ・シンプルさ・リソース効率を重視するパワーユーザー向けに設計されている。 各種データ 開発者 Alpine Linux Development Team 系統 Linux Router Project 開発状況 開発中 初版 2005年8月2日 最新版 3.14: 3.14.0 / 2021年6月15日3.13: 3.13.5 / 2021年4月14日3.12︰ 3.12.7 / 2021年4月14日3.11: 3.11.11 / 2021年4月14日 パッケージ管理 APK カーネル Linux ユーザーインターフェース コマンドラインインターフェース(CLI) 既定のシェル ash ウェブサイト https //www.alpinelinux.org/ 概要 Alpine Linuxはx86-64(64bit)、x86(32bit)、armhf、AArch64、ppc64le、s390xに対応している。 muslとBusyBoxを利用して構築されており、従来のLinuxディストリビューションと比較してLXCやインストールに必要なストレージ容量が小型化されている他、リソース効率が向上しており、起動時間が短縮されている。 その為、Dockerなど起動時間の短いコンテナで多く使用されている。 セキュリティ面では、grsecurity/PaXを適用したLinuxカーネルを使用している。 また、全てのユーザ空間バイナリがスタックスマッシング保護(stack-smashing protection、SSP)付きの位置独立実行ファイル(PIE)としてコンパイルされている。 Alpine Linuxは、単一のフロッピーディスクに収まるLinuxディストリビューションの開発を行っていたLEAF Projectから、SquidやSambaなどのより重いソフトウェアやセキュリティ機能、新しいカーネルの追加を行う為にフォークした。 最初の目標の1つは、より大規模なシステム用のフレームワークの開発であったが、この目標は既に達成されており、現在では主要な目標ではなくなっている。 initにはシンプルかつ軽量なOpenRCを利用しており、多くのLinuxディストリビューションとは異なり、systemdは利用していない。 Alpine Linuxからフォークした、postmarketOSというモバイルオペレーティングシステムが存在する。 リリース 主なリリースを以下に列挙する。 主なバージョン リリース日 サポート終了日 カーネル 2.0 2010年8月16日 2012年4月1日 - 2.1 2010年11月1日 2012年11月1日 - 2.2 2011年5月3日 2013年5月1日 - 2.3 2011年11月1日 2013年11月1日 - 2.4 2012年5月2日 2014年5月1日 - 2.5 2012年11月7日 2014年11月1日 - 2.6 2013年5月17日 2015年5月1日 - 2.7 2013年11月8日 2015年11月1日 - 3.0 2014年6月4日 2016年5月1日 - 3.1 2014年12月10日 2016年11月1日 - 3.2 2015年5月26日 2017年5月1日 3.18.xx 3.3 2016年1月6日 2017年11月1日 4.1.xx 3.4 2016年5月31日 2018年5月1日 4.4.xx 3.5 2016年12月22日 2018年11月1日 3.6 2017年5月24日 2019年5月1日 4.9.xx 3.7 2017年11月30日 2019年11月1日 3.8 2018年6月26日 2020年5月1日 4.14.xx 3.9 2019年1月29日 2021年1月1日 4.19.xx 3.10 2019年6月19日 2021年5月1日 3.11 2019年12月19日 2021年11月1日 5.4.xx 3.12 2020年5月29日 2022年5月1日 3.13 2021年1月14日 2022年11月1日 5.10.xx 3.14 2021年6月15日 2023年5月1日 edge(ローリングリリース) - - - 外部リンク Alpine Linux 公式サイト コメント欄 コメント欄の利用に関してはコメント欄の利用を参照して下さい。 本ページに無関係な内容のコメントは一律して削除されます。Wiki運営に関しては Wiki運営掲示板 にお願いします 。 投稿されているコメントへの返信の際は、必ず返信したいコメント横の○にチェックを入れて返信して下さい。 +上記の内容を守れる方のみご利用ください。 上記の内容を守れる方のみご利用ください。 コメントログ作成 - 名無しさん (2020-08-30 17 11 32) 名前 コメントログ
https://w.atwiki.jp/redcloud/pages/15.html
目次 目次 CentOS5.4 インストール(グラフィカルモード) 初回起動 初期設定 不要サービス停止 ファイヤウォール SELinux アクセス制限 ユーザ sudo prelink yum yum-updatesdサービスを削除する インストール済みパッケージをyumで自動更新 yum-cronをインストールしサービス起動、自動起動設定 rpmforgeリポジトリ導入 ntp インストール 手動で時刻合わせ サービスを起動して、自動起動設定 SSH sshd_configの設定 鍵の作成・配布 公開鍵をauthorized_keysに追加 鍵の配布 セキュリティ強化 Clam AntiVirus chkrootkit screen インストール sysstat インストール 疑問点 CentOS5.4 インストール(グラフィカルモード) 言語を "japanese" に キーボード "日本語" を選択 ドライブ初期化について確認されるので[はい] パーティション設定は何も変更せず[次]。本当にすべてを削除しますか と確認されるので[はい] ネットワーク設定画面 ネットワークデバイスの[編集]を押下 IPv4側…[Manual Configuration]を選択し、IPアドレスとサブネットマスクを入力 IPv6側…Enable~のチェックを外す ホスト名、ゲートウェイ、プライマリDNSを入力して[次] タイムゾーンは "アジア/東京"を選択 rootのパスワードを設定して[次] インストールパッケージ選択画面で[今すぐカスタマイズする]にチェックして[次] インストールカスタマイズ画面で以下を実行して[次] "デスクトップ環境" - "GNOME" のチェックを外す "アプリケーション" の全てのチェックを外す "開発" - "開発ツール" のチェックを入れる "サーバー" - "印刷サポート" のチェックを外す "ベースシステム" - "ベース" だけチェックを入れて、他全てのチェックを外す 初回起動 初回起動時のSetup Agentで下記設定を行う ファイヤウォール設定:無効化 ネットワーク設定:IPアドレスなど確認 起動サービス設定:不要サービスを停止 初期設定 不要サービス停止 acpid anacron apmd atd bluetooth cups hidd ip6tables mcstrans netfs nfslock pcscd restorecond # service cups stop # chkconfig cups off # chkconfig --list cups 0 off 1 off 2 off 3 off 4 off 5 off 6 off ←ランレベル2,3,4,5を確認 ※不要サービス停止についてはここも参考に ファイヤウォール 無効化する # service iptables stop # chkconfig iptables off SELinux 無効化する # setenforce 0 # getenforce Permissive ←確認 # vi /etc/sysconfig/selinux SELINUX=disabled ←disabledにして無効化 アクセス制限 # vi /etc/hosts.deny ALL ALL # vi /etc/hosts.allow ALL 192.168.1. ユーザ 管理用ユーザ作成、パスワード設定 # useradd admin # passwd admin アプリ用グループ作成 # groupadd appgroup アプリ用ユーザ作成、パスワード設定 # useradd -G appgroup appuser # passwd appuser rootになれるのを管理用ユーザのみにする # usermod -G wheel admin # vi /etc/pam.d/su auth required pam_wheel.so use_uid ←コメント記号#を外す rootにだけなれなくする という場合はこう↓ # vi /etc/pam.d/su auth required pam_wheel.so root_only ←root_only と記述 sudo sudo許可ユーザ追加 # visudo %wheel ALL=(ALL) ALL ←コメント除去 wheelグループはsuでrootになれるから許可 hoge ALL=(ALL) ALL ←パスワードなしで何でも許可 hoge ALL=(ALL) PASSWD ALL ←パスワード必須にする場合(普通はこっち) syslog設定 # visudo Defaults syslog=local3 # vi /etc/syslog.conf local3.* /var/log/sudo.log # service syslog restart prelink 止める # vi /etc/sysconfig/prelink PRELINKING=no # prelink -ua yum yum-updatesdサービスを削除する # service yum-updatesd stop # yum -y remove yum-updatesd インストール済みパッケージをyumで自動更新 # yum -y update yum-cronをインストールしサービス起動、自動起動設定 # yum -y install yum-cron # service yum-cron start # chkconfig yum-cron on rpmforgeリポジトリ導入 # wget http //dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm # rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm # vi /etc/yum.repos.d/rpmforge.repo #enabled = 1 enabled = 0 ←デフォルトでは有効にならないようにする ntp インストール # yum -y install ntp 手動で時刻合わせ # ntpdate ntp.dnsbalance.ring.gr.jp サービスを起動して、自動起動設定 # service ntpd start # chkconfig ntpd on SSH sshd_configの設定 鍵方式ログインのみを許可する場合 # vi /etc/ssh/sshd_config Protocol 2 ← #を削除して 2 に変更(SSH2でのみ接続を許可) PermitRootLogin no ← #を削除して no に変更(スーパーユーザでのログインを禁止) PasswordAuthentication no ← #を削除して no に変更(通常のパスワードではなく鍵方式に変更) PermitEmptyPasswords no(空パスワードの禁止) AuthorizedKeysFile .ssh/authorized_keys ←#を削除(公開鍵ファイルの場所をユーザのホームディレクトリ下の .ssh にする) AllowUsers hoge ←SSH接続許可ユーザ パスワードログインも許可する場合 # vi /etc/ssh/sshd_config Protocol 2 ← #を削除して 2 に変更(SSH2でのみ接続を許可) PermitRootLogin no ← #を削除して no に変更(スーパーユーザでのログインを禁止) PasswordAuthentication yes ← #を削除 PermitEmptyPasswords no(空パスワードの禁止) AllowUsers hoge ←SSH接続許可ユーザ 鍵の作成・配布 ssh-keygen $ ssh-keygen -t rsa Generating public/private rsa key pair. ↓何も入力しないでエンターキー押す Enter file in which to save the key (/home/hoge/.ssh/id_rsa) Created directory /home/hoge/.ssh . ↓パスワードを入力 Enter passphrase (empty for no passphrase) ↓再度パスワードを入力 Enter same passphrase again Your identification has been saved in /home/hoge/.ssh/id_rsa. Your public key has been saved in /home/hoge/.ssh/id_rsa.pub. The key fingerprint is 73 21 a5 f6 d5 d5 ac 1b 7c 7f fd 3d 5c 46 7a 7d hoge@hogeserver.jp $ ls -la /home/hogeuser/.ssh/ ←鍵の作成先確認 公開鍵をauthorized_keysに追加 $ cat /home/hoge/.ssh/id_rsa.pub /home/hoge/.ssh/authorized_keys $ rm -f /home/hoge/.ssh/id_rsa.pub 鍵の配布 クライアントに秘密鍵をコピーする セキュリティ強化 Clam AntiVirus インストール # yum -y --enablerepo=rpmforge install clamd 設定 # vi /etc/clamd.conf rootで動作するようにする 設定ファイル編集 #User clamav ウイルス定義の有効化(初回) # cd /tmp←/tmp/clamd が無いとか怒られたので作成 # mkdir clamd # chmod 700 clamd # freshclam サービス起動、自動起動設定 # service clamd start # chkconfig clamd on 日次処理登録(日次起動スクリプト作成) # vi clamscanDaily.sh #!/bin/bash PATH=/usr/bin /bin # excludelist excludelist=/root/clamscan.exclude if [ -s $excludelist ]; then for i in `cat $excludelist` do if [ $(echo "$i"|grep \/$) ]; then i=`echo $i|sed -e s/^\([^ ]*\)\/$/\1/p -e d` echo i["$i"] excludeopt="${excludeopt} --exclude-dir=$i" echo excludopt["$excludeopt"] else excludeopt="${excludeopt} --exclude=$i" echo excludopt["$excludeopt"] fi done fi CLAMSCANTMP=`mktemp` freshclam /dev/null←clamavインストール時に別途cronでの日次処理設定されるのでいらんかも clamscan --recursive --remove ${excludeopt} / $CLAMSCANTMP 2 1 [ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] \ grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root rm -f $CLAMSCANTMP 除外対象を記載したファイル作成 # vi clamscan.exclude /proc/ /sys/ /tmp/ 日次処理化 # mv clamscanDaily.sh /etc/cron.daily/ chkrootkit インストール # yum -y --enablerepo=rpmforge install chkrootkit chkrootkit確認 下記chkrootkit実行結果として"INFECTED"という行が表示されなければ問題なし # chkrootkit | grep INFECTED 実行用スクリプト作成 # vi chkrootkit #!/bin/bash PATH=/usr/bin /bin TMPLOG=`mktemp` # chkrootkit実行 chkrootkit $TMPLOG # ログ出力 cat $TMPLOG | logger -t chkrootkit # SMTPSのbindshell誤検知対応 if [ ! -z "$(grep 465 $TMPLOG)" ] \ [ -z $(/usr/sbin/lsof -i 465|grep bindshell) ]; then sed -i /465/d $TMPLOG fi # rootkit検知時のみroot宛メール送信 [ ! -z "$(grep INFECTED $TMPLOG)" ] \ grep INFECTED $TMPLOG | mail -s "chkrootkit report in `hostname`" root rm -f $TMPLOG # chmod 700 chkrootkit 日次cron化 # mv chkrootkit /etc/cron.daily chkrootkitで使用する安全なコマンドの確保chkrootkitが使用するコマンド群が既に改竄されていた場合、rootkitを正常に検出できなくなるので、chkrootkitが使用するコマンド群をコピーしておき、必要な場合にはそのコマンド群を使用してchkrootkitを実行する。 退避 # mkdir chkrootkitcmd # cp `which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed uname` chkrootkitcmd/ 退避したコマンドが安全かを確認。結果が何も表示されなければOK # chkrootkit -p /root/chkrootkitcmd|grep INFECTED screen インストール # yum -y install screen sysstat インストール # yum -y install sysstat 疑問点 sshdのchkconfigが自動起動になっているにもかかわらず、OS起動時に開始されない
https://w.atwiki.jp/nobunyaganoyabou/pages/13.html
)(); /** * The main Table namespace */ var Table = (function(){ /** * Determine if a reference is defined */ function def(o) {return (typeof o!="undefined");}; /** * Determine if an object or class string contains a given class. */ function hasClass(o,name) { return new RegExp("(^|\\s)"+name+"(\\s|$)").test(o.className); }; /** * Add a class to an object */ function addClass(o,name) { var c = o.className || ""; if (def(c) !hasClass(o,name)) { o.className += (c?" " "") + name; } }; /** * Remove a class from an object */ function removeClass(o,name) { var c = o.className || ""; o.className = c.replace(new RegExp("(^|\\s)"+name+"(\\s|$)"),"$1"); }; /** * For classes that match a given substring, return the rest */ function classValue(o,prefix) { var c = o.className; if (c.match(new RegExp("(^|\\s)"+prefix+"([^ ]+)"))) { return RegExp.$2; } return null; }; /** * Return true if an object is hidden. * This uses the "russian doll" technique to unwrap itself to the most efficient * function after the first pass. This avoids repeated feature detection that * would always fall into the same block of code. */ function isHidden(o) { if (window.getComputedStyle) { var cs = window.getComputedStyle; return (isHidden = function(o) { return none ==cs(o,null).getPropertyValue( display ); })(o); } else if (window.currentStyle) { return(isHidden = function(o) { return none ==o.currentStyle[ display ]; })(o); } return (isHidden = function(o) { return none ==o.style[ display ]; })(o); }; /** * Get a parent element by tag name, or the original element if it is of the tag type */ function getParent(o,a,b) { if (o!=null o.nodeName) { if (o.nodeName==a || (b o.nodeName==b)) { return o; } while (o=o.parentNode) { if (o.nodeName (o.nodeName==a || (b o.nodeName==b))) { return o; } } } return null; }; /** * Utility function to copy properties from one object to another */ function copy(o1,o2) { for (var i=2;i arguments.length; i++) { var a = arguments[i]; if (def(o1[a])) { o2[a] = o1[a]; } } } // The table object itself var table = { //Class names used in the code AutoStripeClassName "table-autostripe", StripeClassNamePrefix "table-stripeclass ", AutoSortClassName "table-autosort", AutoSortColumnPrefix "table-autosort ", AutoSortTitle "Click to sort", SortedAscendingClassName "table-sorted-asc", SortedDescendingClassName "table-sorted-desc", SortableClassName "table-sortable", SortableColumnPrefix "table-sortable ", NoSortClassName "table-nosort", AutoFilterClassName "table-autofilter", FilteredClassName "table-filtered", FilterableClassName "table-filterable", FilteredRowcountPrefix "table-filtered-rowcount ", RowcountPrefix "table-rowcount ", FilterAllLabel "Filter All", AutoPageSizePrefix "table-autopage ", AutoPageJumpPrefix "table-page ", PageNumberPrefix "table-page-number ", PageCountPrefix "table-page-count " }; /** * A place to store misc table information, rather than in the table objects themselves */ table.tabledata = {}; /** * Resolve a table given an element reference, and make sure it has a unique ID */ table.uniqueId=1; table.resolve = function(o,args) { if (o!=null o.nodeName o.nodeName!="TABLE") { o = getParent(o,"TABLE"); } if (o==null) { return null; } if (!o.id) { var id = null; do { var id = "TABLE_"+(table.uniqueId++); } while (document.getElementById(id)!=null); o.id = id; } this.tabledata[o.id] = this.tabledata[o.id] || {}; if (args) { copy(args,this.tabledata[o.id],"stripeclass","ignorehiddenrows","useinnertext","sorttype","col","desc","page","pagesize"); } return o; }; /** * Run a function against each cell in a table header or footer, usually * to add or remove css classes based on sorting, filtering, etc. */ table.processTableCells = function(t, type, func, arg) { t = this.resolve(t); if (t==null) { return; } if (type!="TFOOT") { this.processCells(t.tHead, func, arg); } if (type!="THEAD") { this.processCells(t.tFoot, func, arg); } }; /** * Internal method used to process an arbitrary collection of cells. * Referenced by processTableCells. * It s done this way to avoid getElementsByTagName() which would also return nested table cells. */ table.processCells = function(section,func,arg) { if (section!=null) { if (section.rows section.rows.length section.rows.length 0) { var rows = section.rows; for (var j=0,L2=rows.length; j L2; j++) { var row = rows[j]; if (row.cells row.cells.length row.cells.length 0) { var cells = row.cells; for (var k=0,L3=cells.length; k L3; k++) { var cellsK = cells[k]; func.call(this,cellsK,arg); } } } } } }; /** * Get the cellIndex value for a cell. This is only needed because of a Safari * bug that causes cellIndex to exist but always be 0. * Rather than feature-detecting each time it is called, the function will * re-write itself the first time it is called. */ table.getCellIndex = function(td) { var tr = td.parentNode; var cells = tr.cells; if (cells cells.length) { if (cells.length 1 cells[cells.length-1].cellIndex 0) { // Define the new function, overwrite the one we re running now, and then run the new one (this.getCellIndex = function(td) { return td.cellIndex; })(td); } // Safari will always go through this slower block every time. Oh well. for (var i=0,L=cells.length; i L; i++) { if (tr.cells[i]==td) { return i; } } } return 0; }; /** * A map of node names and how to convert them into their "value" for sorting, filtering, etc. * These are put here so it is extensible. */ table.nodeValue = { INPUT function(node) { if (def(node.value) node.type ((node.type!="checkbox" node.type!="radio") || node.checked)) { return node.value; } return ""; }, SELECT function(node) { if (node.selectedIndex =0 node.options) { // Sort select elements by the visible text return node.options[node.selectedIndex].text; } return ""; }, IMG function(node) { return node.name || ""; } }; /** * Get the text value of a cell. Only use innerText if explicitly told to, because * otherwise we want to be able to handle sorting on inputs and other types */ table.getCellValue = function(td,useInnerText) { if (useInnerText def(td.innerText)) { return td.innerText; } if (!td.childNodes) { return ""; } var childNodes=td.childNodes; var ret = ""; for (var i=0,L=childNodes.length; i L; i++) { var node = childNodes[i]; var type = node.nodeType; // In order to get realistic sort results, we need to treat some elements in a special way. // These behaviors are defined in the nodeValue() object, keyed by node name if (type==1) { var nname = node.nodeName; if (this.nodeValue[nname]) { ret += this.nodeValue[nname](node); } else { ret += this.getCellValue(node); } } else if (type==3) { if (def(node.innerText)) { ret += node.innerText; } else if (def(node.nodeValue)) { ret += node.nodeValue; } } } return ret; }; /** * Consider colspan and rowspan values in table header cells to calculate the actual cellIndex * of a given cell. This is necessary because if the first cell in row 0 has a rowspan of 2, * then the first cell in row 1 will have a cellIndex of 0 rather than 1, even though it really * starts in the second column rather than the first. * See http //www.javascripttoolbox.com/temp/table_cellindex.html */ table.tableHeaderIndexes = {}; table.getActualCellIndex = function(tableCellObj) { if (!def(tableCellObj.cellIndex)) { return null; } var tableObj = getParent(tableCellObj,"TABLE"); var cellCoordinates = tableCellObj.parentNode.rowIndex+"-"+this.getCellIndex(tableCellObj); // If it has already been computed, return the answer from the lookup table if (def(this.tableHeaderIndexes[tableObj.id])) { return this.tableHeaderIndexes[tableObj.id][cellCoordinates]; } var matrix = []; this.tableHeaderIndexes[tableObj.id] = {}; var thead = getParent(tableCellObj,"THEAD"); var trs = thead.getElementsByTagName( TR ); // Loop thru every tr and every cell in the tr, building up a 2-d array "grid" that gets // populated with an "x" for each space that a cell takes up. If the first cell is colspan // 2, it will fill in values [0] and [1] in the first array, so that the second cell will // find the first empty cell in the first row (which will be [2]) and know that this is // where it sits, rather than its internal .cellIndex value of [1]. for (var i=0; i trs.length; i++) { var cells = trs[i].cells; for (var j=0; j cells.length; j++) { var c = cells[j]; var rowIndex = c.parentNode.rowIndex; var cellId = rowIndex+"-"+this.getCellIndex(c); var rowSpan = c.rowSpan || 1; var colSpan = c.colSpan || 1; var firstAvailCol; if(!def(matrix[rowIndex])) { matrix[rowIndex] = []; } var m = matrix[rowIndex]; // Find first available column in the first row for (var k=0; k m.length+1; k++) { if (!def(m[k])) { firstAvailCol = k; break; } } this.tableHeaderIndexes[tableObj.id][cellId] = firstAvailCol; for (var k=rowIndex; k rowIndex+rowSpan; k++) { if(!def(matrix[k])) { matrix[k] = []; } var matrixrow = matrix[k]; for (var l=firstAvailCol; l firstAvailCol+colSpan; l++) { matrixrow[l] = "x"; } } } } // Store the map so future lookups are fast. return this.tableHeaderIndexes[tableObj.id][cellCoordinates]; }; /** * Sort all rows in each TBODY (tbodies are sorted independent of each other) */ table.sort = function(o,args) { var t, tdata, sortconvert=null; // Allow for a simple passing of sort type as second parameter if (typeof(args)=="function") { args={sorttype args}; } args = args || {}; // If no col is specified, deduce it from the object sent in if (!def(args.col)) { args.col = this.getActualCellIndex(o) || 0; } // If no sort type is specified, default to the default sort args.sorttype = args.sorttype || Sort[ default ]; // Resolve the table t = this.resolve(o,args); tdata = this.tabledata[t.id]; // If we are sorting on the same column as last time, flip the sort direction if (def(tdata.lastcol) tdata.lastcol==tdata.col def(tdata.lastdesc)) { tdata.desc = !tdata.lastdesc; } else { tdata.desc = !!args.desc; } // Store the last sorted column so clicking again will reverse the sort order tdata.lastcol=tdata.col; tdata.lastdesc=!!tdata.desc; // If a sort conversion function exists, pre-convert cell values and then use a plain alphanumeric sort var sorttype = tdata.sorttype; if (typeof(sorttype.convert)=="function") { sortconvert=tdata.sorttype.convert; sorttype=Sort.alphanumeric; } // Loop through all THEADs and remove sorted class names, then re-add them for the col // that is being sorted this.processTableCells(t,"THEAD", function(cell) { if (hasClass(cell,this.SortableClassName)) { removeClass(cell,this.SortedAscendingClassName); removeClass(cell,this.SortedDescendingClassName); // If the computed colIndex of the cell equals the sorted colIndex, flag it as sorted if (tdata.col==table.getActualCellIndex(cell) (classValue(cell,table.SortableClassName))) { addClass(cell,tdata.desc?this.SortedAscendingClassName this.SortedDescendingClassName); } } } ); // Sort each tbody independently var bodies = t.tBodies; if (bodies==null || bodies.length==0) { return; } // Define a new sort function to be called to consider descending or not var newSortFunc = (tdata.desc)? function(a,b){return sorttype(b[0],a[0]);} function(a,b){return sorttype(a[0],b[0]);}; var useinnertext=!!tdata.useinnertext; var col = tdata.col; for (var i=0,L=bodies.length; i L; i++) { var tb = bodies[i], tbrows = tb.rows, rows = []; // Allow tbodies to request that they not be sorted if(!hasClass(tb,table.NoSortClassName)) { // Create a separate array which will store the converted values and refs to the // actual rows. This is the array that will be sorted. var cRow, cRowIndex=0; if (cRow=tbrows[cRowIndex]){ // Funky loop style because it s considerably faster in IE do { if (rowCells = cRow.cells) { var cellValue = (col rowCells.length)?this.getCellValue(rowCells[col],useinnertext) null; if (sortconvert) cellValue = sortconvert(cellValue); rows[cRowIndex] = [cellValue,tbrows[cRowIndex]]; } } while (cRow=tbrows[++cRowIndex]) } // Do the actual sorting rows.sort(newSortFunc); // Move the rows to the correctly sorted order. Appending an existing DOM object just moves it! cRowIndex=0; var displayedCount=0; var f=[removeClass,addClass]; if (cRow=rows[cRowIndex]){ do { tb.appendChild(cRow[1]); } while (cRow=rows[++cRowIndex]) } } } // If paging is enabled on the table, then we need to re-page because the order of rows has changed! if (tdata.pagesize) { this.page(t); // This will internally do the striping } else { // Re-stripe if a class name was supplied if (tdata.stripeclass) { this.stripe(t,tdata.stripeclass,!!tdata.ignorehiddenrows); } } }; /** * Apply a filter to rows in a table and hide those that do not match. */ table.filter = function(o,filters,args) { var cell; args = args || {}; var t = this.resolve(o,args); var tdata = this.tabledata[t.id]; // If new filters were passed in, apply them to the table s list of filters if (!filters) { // If a null or blank value was sent in for filters then that means reset the table to no filters tdata.filters = null; } else { // Allow for passing a select list in as the filter, since this is common design if (filters.nodeName=="SELECT" filters.type=="select-one" filters.selectedIndex -1) { filters={ filter filters.options[filters.selectedIndex].value }; } // Also allow for a regular input if (filters.nodeName=="INPUT" filters.type=="text") { filters={ filter "/^"+filters.value+"/" }; } // Force filters to be an array if (typeof(filters)=="object" !filters.length) { filters = [filters]; } // Convert regular expression strings to RegExp objects and function strings to function objects for (var i=0,L=filters.length; i L; i++) { var filter = filters[i]; if (typeof(filter.filter)=="string") { // If a filter string is like "/expr/" then turn it into a Regex if (filter.filter.match(/^\/(.*)\/$/)) { filter.filter = new RegExp(RegExp.$1); filter.filter.regex=true; } // If filter string is like "function (x) { ... }" then turn it into a function else if (filter.filter.match(/^function\s*\(([^\)]*)\)\s*\{(.*)}\s*$/)) { filter.filter = Function(RegExp.$1,RegExp.$2); } } // If some non-table object was passed in rather than a col value, resolve it // and assign it s column index to the filter if it doesn t have one. This way, // passing in a cell reference or a select object etc instead of a table object // will automatically set the correct column to filter. if (filter !def(filter.col) (cell=getParent(o,"TD","TH"))) { filter.col = this.getCellIndex(cell); } // Apply the passed-in filters to the existing list of filters for the table, removing those that have a filter of null or "" if ((!filter || !filter.filter) tdata.filters) { delete tdata.filters[filter.col]; } else { tdata.filters = tdata.filters || {}; tdata.filters[filter.col] = filter.filter; } } // If no more filters are left, then make sure to empty out the filters object for (var j in tdata.filters) { var keep = true; } if (!keep) { tdata.filters = null; } } // Everything s been setup, so now scrape the table rows return table.scrape(o); }; /** * "Page" a table by showing only a subset of the rows */ table.page = function(t,page,args) { args = args || {}; if (def(page)) { args.page = page; } return table.scrape(t,args); }; /** * Jump forward or back any number of pages */ table.pageJump = function(t,count,args) { t = this.resolve(t,args); return this.page(t,(table.tabledata[t.id].page||0)+count,args); }; /** * Go to the next page of a paged table */ table.pageNext = function(t,args) { return this.pageJump(t,1,args); }; /** * Go to the previous page of a paged table */ table.pagePrevious = function(t,args) { return this.pageJump(t,-1,args); }; /** * Scrape a table to either hide or show each row based on filters and paging */ table.scrape = function(o,args) { var col,cell,filterList,filterReset=false,filter; var page,pagesize,pagestart,pageend; var unfilteredrows=[],unfilteredrowcount=0,totalrows=0; var t,tdata,row,hideRow; args = args || {}; // Resolve the table object t = this.resolve(o,args); tdata = this.tabledata[t.id]; // Setup for Paging var page = tdata.page; if (def(page)) { // Don t let the page go before the beginning if (page 0) { tdata.page=page=0; } pagesize = tdata.pagesize || 25; // 25=arbitrary default pagestart = page*pagesize+1; pageend = pagestart + pagesize - 1; } // Scrape each row of each tbody var bodies = t.tBodies; if (bodies==null || bodies.length==0) { return; } for (var i=0,L=bodies.length; i L; i++) { var tb = bodies[i]; for (var j=0,L2=tb.rows.length; j L2; j++) { row = tb.rows[j]; hideRow = false; // Test if filters will hide the row if (tdata.filters row.cells) { var cells = row.cells; var cellsLength = cells.length; // Test each filter for (col in tdata.filters) { if (!hideRow) { filter = tdata.filters[col]; if (filter col cellsLength) { var val = this.getCellValue(cells[col]); if (filter.regex val.search) { hideRow=(val.search(filter) 0); } else if (typeof(filter)=="function") { hideRow=!filter(val,cells[col]); } else { hideRow = (val!=filter); } } } } } // Keep track of the total rows scanned and the total runs _not_ filtered out totalrows++; if (!hideRow) { unfilteredrowcount++; if (def(page)) { // Temporarily keep an array of unfiltered rows in case the page we re on goes past // the last page and we need to back up. Don t want to filter again! unfilteredrows.push(row); if (unfilteredrowcount pagestart || unfilteredrowcount pageend) { hideRow = true; } } } row.style.display = hideRow?"none" ""; } } if (def(page)) { // Check to see if filtering has put us past the requested page index. If it has, // then go back to the last page and show it. if (pagestart =unfilteredrowcount) { pagestart = unfilteredrowcount-(unfilteredrowcount%pagesize); tdata.page = page = pagestart/pagesize; for (var i=pagestart,L=unfilteredrows.length; i L; i++) { unfilteredrows[i].style.display=""; } } } // Loop through all THEADs and add/remove filtered class names this.processTableCells(t,"THEAD", function(c) { ((tdata.filters def(tdata.filters[table.getCellIndex(c)]) hasClass(c,table.FilterableClassName))?addClass removeClass)(c,table.FilteredClassName); } ); // Stripe the table if necessary if (tdata.stripeclass) { this.stripe(t); } // Calculate some values to be returned for info and updating purposes var pagecount = Math.floor(unfilteredrowcount/pagesize)+1; if (def(page)) { // Update the page number/total containers if they exist if (tdata.container_number) { tdata.container_number.innerHTML = page+1; } if (tdata.container_count) { tdata.container_count.innerHTML = pagecount; } } // Update the row count containers if they exist if (tdata.container_filtered_count) { tdata.container_filtered_count.innerHTML = unfilteredrowcount; } if (tdata.container_all_count) { tdata.container_all_count.innerHTML = totalrows; } return { data tdata, unfilteredcount unfilteredrowcount, total totalrows, pagecount pagecount, page page, pagesize pagesize }; }; /** * Shade alternate rows, aka Stripe the table. */ table.stripe = function(t,className,args) { args = args || {}; args.stripeclass = className; t = this.resolve(t,args); var tdata = this.tabledata[t.id]; var bodies = t.tBodies; if (bodies==null || bodies.length==0) { return; } className = tdata.stripeclass; // Cache a shorter, quicker reference to either the remove or add class methods var f=[removeClass,addClass]; for (var i=0,L=bodies.length; i L; i++) { var tb = bodies[i], tbrows = tb.rows, cRowIndex=0, cRow, displayedCount=0; if (cRow=tbrows[cRowIndex]){ // The ignorehiddenrows test is pulled out of the loop for a slight speed increase. // Makes a bigger difference in FF than in IE. // In this case, speed always wins over brevity! if (tdata.ignoreHiddenRows) { do { f[displayedCount++%2](cRow,className); } while (cRow=tbrows[++cRowIndex]) } else { do { if (!isHidden(cRow)) { f[displayedCount++%2](cRow,className); } } while (cRow=tbrows[++cRowIndex]) } } } }; /** * Build up a list of unique values in a table column */ table.getUniqueColValues = function(t,col) { var values={}, bodies = this.resolve(t).tBodies; for (var i=0,L=bodies.length; i L; i++) { var tbody = bodies[i]; for (var r=0,L2=tbody.rows.length; r L2; r++) { values[this.getCellValue(tbody.rows[r].cells[col])] = true; } } var valArray = []; for (var val in values) { valArray.push(val); } return valArray.sort(); }; /** * Scan the document on load and add sorting, filtering, paging etc ability automatically * based on existence of class names on the table and cells. */ table.auto = function(args) { var cells = [], tables = document.getElementsByTagName("TABLE"); var val,tdata; if (tables!=null) { for (var i=0,L=tables.length; i L; i++) { var t = table.resolve(tables[i]); tdata = table.tabledata[t.id]; if (val=classValue(t,table.StripeClassNamePrefix)) { tdata.stripeclass=val; } // Do auto-filter if necessary if (hasClass(t,table.AutoFilterClassName)) { table.autofilter(t); } // Do auto-page if necessary if (val = classValue(t,table.AutoPageSizePrefix)) { table.autopage(t,{ pagesize +val}); } // Do auto-sort if necessary if ((val = classValue(t,table.AutoSortColumnPrefix)) || (hasClass(t,table.AutoSortClassName))) { table.autosort(t,{ col (val==null)?null +val}); } // Do auto-stripe if necessary if (tdata.stripeclass hasClass(t,table.AutoStripeClassName)) { table.stripe(t); } } } }; /** * Add sorting functionality to a table header cell */ table.autosort = function(t,args) { t = this.resolve(t,args); var tdata = this.tabledata[t.id]; this.processTableCells(t, "THEAD", function(c) { var type = classValue(c,table.SortableColumnPrefix); if (type!=null) { type = type || "default"; c.title =c.title || table.AutoSortTitle; addClass(c,table.SortableClassName); c.onclick = Function("","Table.sort(this,{ sorttype Sort[ "+type+" ]})"); // If we are going to auto sort on a column, we need to keep track of what kind of sort it will be if (args.col!=null) { if (args.col==table.getActualCellIndex(c)) { tdata.sorttype=Sort[ "+type+" ]; } } } } ); if (args.col!=null) { table.sort(t,args); } }; /** * Add paging functionality to a table */ table.autopage = function(t,args) { t = this.resolve(t,args); var tdata = this.tabledata[t.id]; if (tdata.pagesize) { this.processTableCells(t, "THEAD,TFOOT", function(c) { var type = classValue(c,table.AutoPageJumpPrefix); if (type=="next") { type = 1; } else if (type=="previous") { type = -1; } if (type!=null) { c.onclick = Function("","Table.pageJump(this,"+type+")"); } } ); if (val = classValue(t,table.PageNumberPrefix)) { tdata.container_number = document.getElementById(val); } if (val = classValue(t,table.PageCountPrefix)) { tdata.container_count = document.getElementById(val); } return table.page(t,0,args); } }; /** * A util function to cancel bubbling of clicks on filter dropdowns */ table.cancelBubble = function(e) { e = e || window.event; if (typeof(e.stopPropagation)=="function") { e.stopPropagation(); } if (def(e.cancelBubble)) { e.cancelBubble = true; } }; /** * Auto-filter a table */ table.autofilter = function(t,args) { args = args || {}; t = this.resolve(t,args); var tdata = this.tabledata[t.id],val; table.processTableCells(t, "THEAD", function(cell) { if (hasClass(cell,table.FilterableClassName)) { var cellIndex = table.getCellIndex(cell); var colValues = table.getUniqueColValues(t,cellIndex); if (colValues.length 0) { if (typeof(args.insert)=="function") { func.insert(cell,colValues); } else { var sel = select onchange="Table.filter(this,this)" onclick="Table.cancelBubble(event)" class=" +table.AutoFilterClassName+ " option value="" +table.FilterAllLabel+ /option ; for (var i=0; i colValues.length; i++) { sel += option value=" +colValues[i]+ " +colValues[i]+ /option ; } sel += /select ; cell.innerHTML += " br "+sel; } } } }); if (val = classValue(t,table.FilteredRowcountPrefix)) { tdata.container_filtered_count = document.getElementById(val); } if (val = classValue(t,table.RowcountPrefix)) { tdata.container_all_count = document.getElementById(val); } }; /** * Attach the auto event so it happens on load. * use jQuery s ready() function if available */ if (typeof(jQuery)!="undefined") { jQuery(table.auto); } else if (window.addEventListener) { window.addEventListener( "load", table.auto, false ); } else if (window.attachEvent) { window.attachEvent( "onload", table.auto ); } return table; })(); }
https://w.atwiki.jp/linux2ch/pages/193.html
Ubuntu Linuxスレ立て用のテンプレート スレタイ 【deb系】Ubuntu Linux 20【ディストリ】 1レス目 Debian開発者の一人が開発したDebianベースのディストリビューション ただし互換性はないのでDebianのパッケージとは混ぜるな危険 6ヶ月ごとの安定したリリースを目標としている ■ 公式サイト http //www.ubuntulinux.org/ ■ Ubuntu日本チーム http //www.ubuntulinux.jp/ ■ TIPS https //wiki.ubuntulinux.jp/UbuntuTips ■ まとめサイト Ubuntu Linux に関するFAQ http //www12.atwiki.jp/linux2ch/?InstallationUbuntuLinuxFAQs 過去ログ http //www12.atwiki.jp/linux2ch/?InstallationUbuntuLinuxFAQs/Log ■ 質問スレ 【初心者専用】 Ubuntu Linux 13 【愚公移山】 http //pc11.2ch.net/test/read.cgi/linux/1193997897/ ■ 前スレ deb系】Ubuntu Linux 19【ディストリ】 http //pc11.2ch.net/test/read.cgi/linux/1194429543/ 2レス目 ■ Kubuntu 公式サイト http //www.kubuntu.org/ ■ Xubuntu 公式サイト http //www.xubuntu.org/ ■ Edubuntu 公式サイト http //www.edubuntu.org/ ■ Ichthux 公式サイト http //www.ichthux.com/ ■ Ubuntu Studio 公式サイト http //ubuntustudio.org/ ■ Mythbuntu 公式サイト http //www.mythbuntu.org/ ■ 非公式 Ubuntu 7.10 初心者用ガイド(英語) http //ubuntuguide.org/wiki/Ubuntu Gutsy ■ 非公式 Ubuntu 7.04 初心者用ガイド http //ubuntuguide.org/wiki/Ubuntu Feisty_ja ■ 非公式 Ubuntu 6.06 (LTS) 初心者用ガイド http //ubuntuguide.org/wiki/Ubuntu_dapper_Ja ■ インストール完全ガイド Ubuntu 7.10 日本語ローカライズド Desktop CD http //itpro.nikkeibp.co.jp/article/COLUMN/20071102/286351/ ■ 画面で見る最新Linux「Ubuntu 7.10 日本語ローカライズ版 Desktop CD」 http //itpro.nikkeibp.co.jp/article/NEWS/20071102/286319/ ■ 関連スレ Debian GNU/Linux スレッド Ver. 47 http //pc11.2ch.net/test/read.cgi/linux/1179055251/ 3レス目 ■ Wiki(英語) https //wiki.ubuntu.com/ ■ フォーラム(英語) http //www.ubuntuforums.org/ ■ ドキュメント(英語) http //help.ubuntu.com/ ■ メーリングリスト(英語) http //www.ubuntu.com/community/lists ■ 日本語フォーラム http //forum.ubuntulinux.jp/ ■ 日本語メーリングリスト http //www.ubuntulinux.jp/Mailinglist/ ■ ダウンロード(公式版) http //www.ubuntu.com/download ■ ダウンロード(日本語ローカライズ版) http //ubuntulinux.jp/download/ ■ 派生版・ローカライズ版の一覧 http //www.ubuntu.com/download/derivatives ■ Ubuntu 6.06LTS Desktop(LiveCD高速起動版) http //cdimage.ubuntulinux.jp/releases/dapper/ubuntu-ja-6.06-desktop-i386-20060805.iso.torrent ■ Ubuntu 7.10 リポジトリを納めた DVDx5(ネットに繋げない人向け) http //kambing.ui.edu/pub/ubuntu-repository/gutsy/ 4レス目 ■ 公式な派生ディストリ(大括弧内はメタパッケージ名) Ubuntu (Gnomeベース) [ubuntu-desktop] Kubuntu (KDEベース) [kubuntu-desktop] Xubuntu (Xfceベース) [xubuntu-desktop] Edubuntu (Gnomeベース、教育用) [edubuntu-desktop] Ichthux (KDEベース、キリスト教徒用) [ichthux-desktop] Ubuntu Studio (Gnomeベース、マルチメディア制作環境) [ubuntustudio-desktop] Gobuntu (Gnomeベース、完全フリー) [gobuntu-desktop] Mythbuntu (Xfceベース、MythTV用) [mythbuntu-desktop] Ubuntu Mobile and Embedded (Hildonベース、モバイル/組み込み向け) [ubuntu-mobile] ■ Ubuntu Japanese Teamの派生ディストリ Ubuntu-ja (Gnomeベース、日本語環境の改善) [ubuntu-desktop-ja] Kubuntu-ja (KDEベース、日本語環境の改善) [kubuntu-desktop-ja] ■ その他メジャーな派生ディストリ eco linux (Xfceベース、Xubuntuよりも軽い) http //pc11.2ch.net/test/read.cgi/linux/1186025666/ Linux Mint (Gnomeベース、Windows風) http //pc11.2ch.net/test/read.cgi/linux/1174742061/ SimplyMEPIS (KDEベース、定評がある) http //pc11.2ch.net/test/read.cgi/linux/1070830662/ Freespire/Linspire (KDEベース、CNRが使える) http //pc11.2ch.net/test/read.cgi/linux/1077026075/ Nexenta (Gnomeベース、OpenSolarisカーネル) http //pc11.2ch.net/test/read.cgi/unix/1135076342/ ■ その他派生ディストリ http //www12.atwiki.jp/linux2ch/?InstallationUbuntuLinuxFAQs#derivatives ■ Linux派生図 http //kde-files.org/content/download.php?content=44218 id=1
https://w.atwiki.jp/stradaryu/pages/365.html
UNKNOWN SUV 概要 車体:SUVタイプ 会社:MAIBATSU? ドア:4枚 実車:三菱・パジェロ、フォード・エスケープ 解説 GTA4には登場しなかった名称不明の車両。 GTA4内のTV番組などで登場。 ホイールやモデルから察するにLANDSTALKERと思われる。 おそらく、GTA3のLANDSTALKERを伝承させた形で登場予定だったと思われるが何かしらの事情で現在のリンカーン・ナビゲーターをモデルとした車両に変えたものと思われる。 こんなに出来がいいのに削除されてしまっているのは非常に残念。 しかもGTA4では登場していない小型・中型SUVというのはより残念である。 特別仕様、レアカラー ルーフレール ルーフレールを付けた個体が存在していたと思われる。 画像 実車 フォード・エスケープ 実車 3代目 三菱・パジェロ
https://w.atwiki.jp/kngwykhm/pages/35.html
*** Solarisのコマンドパス ①/usr/sbin /usr/bin /usr/local/sbin /usr/local/bin /usr/ccs/bin ②/usr/sbin /usr/bin /usr/local/sbin /usr/local/bin /usr/local/ccs/bin ↓環境変数に反映させる PATH=① or ② export PATH *** コマンドの基本(bashシェル) バックグラウンドで処理を実行させる (時間が掛かる処理に付けるとgood) 例) vacuumdb -f school | (パイプ) 前後のコマンドを連携させて実行する 例) cat access_log | more コマンドを順に(バッチ)実行する 例)make make install !! 一つ前に入力したコマンドを実行する bashシェルでは、コマンド履歴を利用して操作を簡略化できます。 !! 直前のコマンド !n 履歴番号がn番のコマンド !-n n回前に実行したコマンド !string 文字列stringで始まる直近のコマンド !?string 文字列stringを含む直近のコマンド TABキー コマンド入力の補完を行う ↑キー コマンド履歴 history コマンド コマンド履歴一覧を表示 ~ ユーザのホームディレクトリのこと 例) cd ~ Ctrl+d ログアウトする Ctrl+z 現在実行中の処理をバックグラウンドで実行させる 実際にはbg [番号]でバックグラウンド実行になる 例) tar xxx.tar /home/hoge ここでCtrl+z [1]+ Stopped bg 1 ここで指定する番号は、Stoppedで左側表示されるモノを指定する。 逆にフォアグラウンドに戻りたい場合、fg 番号で戻ることができる。 bash [shバッチファイルなど] あらたにシェルを起動して処理を行う bash --debug等のオプションで詳細な戻り値などを確認可能 *** ファイルの中身を表示する cat [ファイル名] 一画面毎に区切って表示 more [ファイル名] パイプで利用可能 例) cat httpd.conf | more ファイル頭を表示 head [ファイル名] -n [行数] ファイル末尾を表示 (ログに使える) tail [ファイル名] -n [行数] -fs[秒数] 一定秒数後に読み直す *** ユーザ追加 useradd -m -d [ホームディレクトリ] -g [グループID or グループ名] -s [シェル] -k [テンプレートファイルの場所] -c [コメント] -p [MD5で暗号化したパスワード] [ユーザID] -m をつけるとホームディレクトリを作成してくれる。 Linuxでの例) useradd -g apache -m -d /soffice/es01 es01 useradd -g 1 -m -d /var/xxxxx -s /nologin xxxxx Solarisでの例) ※Solarisでは 下記のようにしないと、 Linuxと同じようにユーザディレクトリが作成されません。 groupadd postgres useradd -g postgres -m -d /export/home/postgres -s /usr/bin/bash -k /etc/skel postgres useradd -g other -m -d /export/home5/demo14 -s /usr/bin/bash -k /etc/skel demo14 useradd -g other -d /home/sadmin_demo -s /usr/bin/bash -k /etc/skel sadmin_demo *** パスワードを変更したい passwd [ユーザID] *** パスワードを変更したい(問い合わせ無しで) # root 専用 passwd --stdin [ユーザID] txt txtには2つ同じパスワードを改行で区切って作成する。 sambaのsmbpasswd も大体同じことをしてやると応用可能。 *** ユーザ変更 usermod -m -d [ホームディレクトリ] -g [グループ] -s [シェル] -c [コメント] -p [MD5で暗号化したパスワード] [ユーザID] SGIDとして追加させたい場合 usermod -G [グループ] [ユーザID] *** ユーザ変更 usermod -m -d [ホームディレクトリ] -g [グループ] -s [シェル] -c [コメント] *** ユーザ削除 userdel -r [ユーザ名] -r:ユーザディレクトリも含めて削除 *** ディスク使用量 指定ディレクトリの使用容量(使用ブロックでのサイズ) du -h -s [ディレクトリ] -h:容量に単位を付ける(Linux) -s:使用容量のみを出す *** ファイルの合計サイズを出す(Windowsと同じ感じで出る) find [ディレクトリ] -type f -printf "%s\n" |awk { sum += $1; }; END { print sum } *** ディスクの空き容量 df -h -h:容量に単位を付ける(Linux) *** ディレクトリの作成 mkdir [ディレクトリ名] -p ディレクトリ作成先の途中パスが存在しない場合作成する *** ファイルコピー cp -p [コピー元] [コピー先] -v: 詳細(Linux) -p: 権限を保持 -i: 上書き確認 -r: ディレクトリを含める -f: 強制実行 ディレクトリも含めるコピー cp -pr *** ファイル移動 mv -p [コピー元] [コピー先] -v: 詳細(Linux) -p: 権限を保持 -i: 確認 -r: ディレクトリを含める -f: 強制実行 ディレクトリも含めるコピー mv -pr [コピー元] [コピー先] *** ファイル削除 rm [オプション] [ディレクトリ or ファイル名] -v: 詳細(Linux) -i: 削除の確認を行う -r: ディレクトリを含める -f: 強制的に削除 ディレクトリも含めての削除 (※間違っても ルートディレクトリでやらないこと。全データ消えます) rm -fr [ディレクトリ or ファイル名] *** オーナー変更 chown [オプション] [ユーザID] [グループID] [ファイル or ディレクトリ] -v 詳細(Linux) -R ディレクトリとディレクトリ内のファイルを処理対象に含める *** 権限変更 chmod [オプション] [権限] [ファイル or ディレクトリ] -v 詳細(Linux) -R ディレクトリとディレクトリ内のファイルを処理対象に含める 000 全ユーザ読み書き不能 755 全ユーザに実行権限 600 ログインユーザのみに 書込可能 644 ログインユーザ書込、他ユーザは読み込みのみ *** リンク ln -s [リンク対象(実体)] [リンクファイル名] -s:シンボリックリンク(付けないとハードリンク) *** ファイル一覧 ls -lah [ディレクトリ or ファイル名] -l:詳細リストで表示 -a:隠しファイルを表示する -h:ファイルサイズ単位をわかりやすく表示する(Linux) -F:ディレクトリには「/」を付けて表示する -t:更新日付の新しい順に表示 -S ファイルサイズ順で表示 -R カレントディレクトリ配下すべて 応用) ★ディレクトリのみを確認したい (1階層のみ) ls -F /home |grep / ★ディレクトリのみを確認したい (配下のディレクトリすべて) ls -R /home/itou |grep | sed s/ // *** ディレクトリ構造を取得したい treeというコマンドを手動で入れる。 ftp //mama.indstate.edu/linux/tree/ tar xfz tree-x.x.x.tgz cd tree-* make make install 使用例) tree /home/hoge ディレクトリのみ表示 tree -d /home/hoge *** プロセス確認 ps -ef | grep "対象プロセス名" 例) ps -ef | grep httpd *** CPU利用率を確認 top(Linuxのみ?) プロセス情報を監視する Solarisは prstat とうつ *** ファイル検索 (便利) find [ディレクトリパス] -name "キーワード" find [ディレクトリパス] -atime 1 -print 1日前にアクセスされたファイルの検索 find [ディレクトリパス] -ctime 2 -print 2日前に更新されたファイルの検索 find [ディレクトリパス] -size -1k -print ファイルサイズが1k以下のファイル検索 find [ディレクトリパス] -size +1c -print ファイルサイズが1byte以上のファイル *** 複数条件での検索 (Linux) 例) cat access.log | grep -e "127.0.0.1" -e "172.16.20.62" *** su コマンドで一時的にユーザを替えて実行 rootでログイン su - su - ユーザ名 su - ユーザ名 -c "コマンド名" *** sudo コマンドで一時的にユーザを替えて実行 sudo -u [ユーザ名] [コマンド] 例) sudo -u nobody ls -la /tmp sudoの設定を変更するには、visudo で書き換える ※RHEL5/CentOSでsudoを実行するとエラーになる場合、visudoで requiretty をコメントアウトし保存する *** su コマンドでrootになるユーザを制限する ※予め、PAMがインストール済であること(rpm -qa | grep pam) vi /etc/pam.d/su #↓以下の行を追加 auth required /lib/security/pam_wheel.so group=wheel ※wheelグループに属していないユーザは su 出来なくなる。 adminをwheelグループに属させる場合、 vi /etc/group 変更前:wheel * 0 root 変更後:wheel * 0 root,admin とする。 最後に、設定変更 vi /etc/login.defs #↓以下の行を追加 SU_WHEEL_ONLY yes *** chroot 一時的にルートディレクトリを変更する。 例) chroot /mnt/sysimage *** 日付 確認 date 時を設定する date -s 17 30 日を設定する date -s MM/DD/YYYY or YYYY/MM/DD ntpを利用して日付を合わせる ntpdate -s [NTPサーバ] 日付を記憶させる(ハードウエアクロックと同期させる) clock -w or hwclock -w *** tar 解凍(Linux) tar xvfz [圧縮ファイル.gz] tar xvjf [圧縮ファイル.bz2] 解凍(Solaris) gunzip [圧縮ファイルtar.gz] tar xvf [tarファイル] GZIP圧縮(Linux) tar cvfz [tarファイル名] [圧縮対象ディレクトリorファイル名] GZIP圧縮(Solaris) tar cvf [tarファイル名] [tarでまとめる対象ディレクトリorファイル名] gzip [tarファイル名] 確認 tar t [tarファイル名] ※応用 1.tar 展開(-x)or表示(-t) (1)特定のファイルのみ展開(それ以外は削除) tar -zxf hoge.tgz;mv hoge/fuga.file .;rm -fr hoge (2)特定のディレクトリー下全て(それ以外は削除) tar -zxf hoge.tgz;mv hoge/fuga.dir .;rm -fr hoge (3)ディレクトリーのみ全て tar -zxf hoge.tgz;rm -f hoge/* (4)特定のディレクトリーの直下のみ tar -zxf hoge.tgz;mv hoge/fuga.dir .;rm -fr hoge;rm -fr fuga.dir/*/*;rmdir fuga.dir/* */ *** lha lha a [lzhファイル名] [圧縮対象ファイル] lha m [lzhファイル] [圧縮対象ファイル] lzhファイルに圧縮後、元ファイルを削除 lha xw=[解凍先パス] [lzhファイル] Windows上で作成したlzhを解凍するときに ファイル名の大文字小文字を区別させて解凍する場合 lha xg [lzhファイル] lha xf [lzhファイル] 上書きの確認をしないで解凍 *** FTP ftp [接続先IP or ホスト名] ユーザ、パスワードの順に入力 利用可能なコマンド(proftpd) nlist ファイル一覧取得 bin バイナリモード asc アスキーモード passiv パッシブモードの切り替え cd サーバ側のディレクトリ変更 lcd ローカル側のディレクトリ変更 ls -la ファイル一覧 !ls -la ローカル側のファイル一覧 pwd カレントディレクトリの表示 delete ファイル削除 mdelete ファイル一括削除 get ダウンロード mget 一括ダウンロード put アップロード mput 一括アップロード help コマンドの一覧表示 by 終了 bye 終了 quit 終了 *** lftp (2GB以上のファイルを扱えない場合のFTP) lftp open サーバ名 *** sftp (SSH暗号接続で ファイル転送する) tcpポート はSSHの22番を使用する? sftp [オプション] [ユーザID@ホスト名 or IPアドレス] オプション -C :データ圧縮して通信を行う 接続後のコマンド Available commands cd path Change remote directory to path lcd path Change local directory to path chgrp grp path Change group of file path to grp chmod mode path Change permissions of file path to mode chown own path Change owner of file path to own help Display this help text get remote-path [local-path] Download file lls [ls-options [path]] Display local directory listing ln oldpath newpath Symlink remote file lmkdir path Create local directory lpwd Print local working directory ls [path] Display remote directory listing lumask umask Set local umask to umask mkdir path Create remote directory progress Toggle display of progress meter put local-path [remote-path] Upload file pwd Display remote working directory exit Quit sftp quit Quit sftp rename oldpath newpath Rename remote file rmdir path Remove remote directory rm path Delete remote file symlink oldpath newpath Symlink remote file version Show SFTP version !command Execute command in local shell ! Escape to local shell ? Synonym for help ※ascii や binモードがない。 *** ネットワーク設定(Linux) すべてのネットワーク接続を確認 ifconfig -a アダプタを起動/停止 ifconfig [アダプタ名] [up/down] Linux専用 netconfig 上記設定後, service network restart # 100Full固定で オートネゴをキャンセルさせる ethtool -s eth0 speed 100 duplex full autoneg off *** ネットワーク設定(Solaris) すべてのネットワーク接続を確認 ifconfig -a アダプタを起動/停止 ifconfig [アダプタ名] [up/down] ・Solarisの場合 vi /etc/hosts 192.168.1.31 gis2 vi /etc/resolv.conf nameserver domain serach を指定 vi /etc/nodename ホスト名 vi /etc/hostname.hme0 ホスト名 vi /etc/defaultrouter 192.168.1.253 (ゲートウェイ) vi /etc/netmasks 192.168.1.0 255.255.255.0 例 ifconfig hme0 down (※telnet経由でコレをやるとつながらなくなります) ifconfig hme0 192.168.1.31 netmask 255.255.255.0 broadcast 192.168.1.255 ifconfig hme0 up *** ネットワークの設定(Linux) Red Hat Linux系の場合次のファイルに書き込まれる。 vi /etc/hosts vi /etc/resolv.conf vi /etc/sysconfig/network ホスト名・デフォルトゲートウェイなど vi /etc/sysconfig/network-scripts/ifcfg-eth0 IP設定 vi /etc/sysconfig/network-scripts/route-eth0 ルーティング設定(RH9) vi /etc/sysconfig/static-routes ルーティング設定(RH7) *** IPエイリアスの設定(IPアドレスを複数持ちたい場合) ifconfig eth0 [番号] [IPアドレス] netmask [ネットマスク] broadcast [ブロードキャスト] エイリアスを無効にする ifconfig eth0 [番号] 0 エラーは出るが消える。 *** ルーティング (route ルート) 静的ルート設定方法(Red Hat Linux 7まで) vi /etc/sysconfig/static-routes eth0 net 192.168.99.0/24 gw 192.168.xx.253 eth0 net 192.168.199.0/24 gw 192.168.xx.253 /etc/sysconfig/static-routes eth0 静的ルート設定方法(Red Hat Linux 8以降) vi /etc/sysconfig/network-scripts/route-eth0 192.168.99.0/24 via 192.168.xxx.253 192.168.199.0/24 via 192.168.xxx.253 service network reload ルーティング情報の追加 Linux route [add/del] [-net ] [gw] [metric] [netmask] [device] route add -net 192.168.99.0 gw 192.168.xxx.253 metric 1 netmask 255.255.255.0 eth0 route add -net 172.16.21.0 gw 172.16.20.253 netmask 255.255.255.0 eth0 Solaris route add 192.168.100.88 -netmask 255.255.255.0 192.168.100.193 ルーティング情報の削除 route del -net 192.168.90.0 netmask 255.255.255.0 route del -net 192.168.99.0 netmask 255.255.255.0 gw 192.168.90.253 (同じネットワークでルートが複数できてしまった場合、その個数分削除することで消せる) デフォルトゲートウェイ追加 route add default gw 192.168.1.254 デフォルトゲートウェイ削除 route del default gw 192.168.1.254 デフォルトゲートウェイ・ホスト名など (ファイルに書いておく場合) vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=kaigi3 ←サーバのホスト名(FQDN) GATEWAY=10.86.41.254 GATEWAYDEV=eth1 ←複数のNICがある場合に、デフォルトゲートウエイとするデバイスを指定 FORWARD_IPV4=no ←パケット中継(ルータ)とする場合のみyes ファイル編集後、 service network restart ルーティング確認方法 route netstat -nr *** 生存確認 (ping ピン/ピング) ping -s [IP or ホスト名] *** ホスト名 hostname hostname [ホスト名] *** 使用されているポート確認 (netstat ネットスタット) netstat -an *** ルーティング(経路)の確認 netstat -rn route *** ホスト名逆引き確認 nslookup [DNSサーバIP or ホスト名(省略可)] [IP or ホスト名] MXを調べる場合は set type=MX xxxxx.ne.jp *** dig *** サービス(Linux) setup (対話的に設定可能) サービス追加 chkconfig --add [サービス名] サービス削除 chkconfig --del [サービス名] サービス一覧 chkconfig --list 起動を有効化 chkconfig [サービス名] on 起動を無効化 chkconfig [サービス名] off initレベルを指定する場合 chkconfig --level=35 [サービス] on/off サービスの起動 service [サービス名] start サービスの停止 service [サービス名] stop サービスの再起動 service [サービス名] restart サービスの状態 service [サービス名] status ※service の代わりに /etc/init.d/ と置き換えても実行できる *** システム終了・再起動 ※Solarisでいきなり再起動させるとディスクにデータを 書き込まないままになり危険らしいです。 おまじない程度にsyncコマンドを数回発行させてから終了・再起動させること。 sync キャッシュにあるデータをディスクに保存 poweroff 終了(Linux) shutdown -h now 終了(Linux) halt 終了 init 0 終了 shutdown -y -i0 -g0 終了(Solaris) shutdown -y -i5 -g0 電源断(Solaris) shutdown -r now 再起動(Linux) shutdown -y -i6 -g0 再起動(Solaris) reboot 再起動 init 6 再起動 fastboot チェックを簡易化して終了し再起動 *** Samba ファイル共有 Sambaの接続状況を確認 smbstatus Sambaのユーザ追加 smbpasswd -a [ユーザ名] Sambaのユーザ削除 smbpasswd -x [ユーザ名] sambaの動作確認コマンド これで共有しているディレクトリの中身が見えてくればOK smbclient -U [ユーザ名]%[パスワード] //IPorサーバホスト名/共有フォルダ名 例) smbclient -U hoge%xxxx //win2003/test ※samba/windows上の共有ディレクトリをLinuxからマウントしてアクセスする場合 [username=,password,codepage=,....] #smbfs が使用できる場合 mount -t smbfs -o username=admin,password=xxxxxx //192.168.2.150/backup /mnt/backup #cifs が使用できる場合 mount -t cifs -o username=admin,password=xxxxxx //192.168.2.150/backup /mnt/backup *** コマンドパスの確認 (which ウィッチ) which [コマンド名] 例) which sudo /usr/local/bin/sudo *** カレントディレクトリ pwd 現在居るディレクトリを表示 cd ホームディレクトリに移動する cd [ディレクトリ] 指定ディレクトリに移動する *** カレントユーザー (whoami フーアムアイ) whoami *** テキストエディタ (vi ブイアイ) vi [ファイル名] vim [ファイル名] コマンド ESC 入力・検索モードから抜ける i 入力モードに入る x 1文字削除 d 1行削除 o 1行挿入 a カーソル挿入 c 行クリア b カーソル1行上へ移動 e カーソル1行下へ移動 [移動数]h ← [移動数]j ↓ [移動数]k ↑ [移動数]l → v Visualモードに入る(領域選択) g ファイル先頭に移動する Shift+g ファイル末尾に移動する ^ 行頭へ移動 $ 行末へ移動 % 対応する括弧へ移動 yy 行コピー dd 行削除(切り取り) p 貼り付け u 元に戻す(アンドゥ) Ctrl+r やり直し(リドゥ) ! コマンドを強制する Ctrl+u ↑半ページスクロール Ctrl+d ↓半ページスクロール Ctrl+f ↓1ページスクロール [行数] 指定行にジャンプ w 上書き保存 w ファイル名 ファイル名を指定して保存 q viを終了する 文字列検索 /検索文字列/ n 次の検索ヒット対象へジャンプ 文字列置換 %s/置換前文字列/置換後の文字列/ でエンター (※ .や/などの特殊文字を含む場合\.や\/とし、\マークでエスケープする) *** メール mail メールを読む コマンド h メール一覧を表示する n 次のメールを表示 p 現在のメールを読む d 現在のメールを削除 q メールを保存して終了 ? ヘルプ n番目のメールを読む mail [n番] 読み終わったメールはユーザ・ディレクトリ ~/mbox に保存される メール送信 mail [送信先メールアドレス(複数可能)] Subject [題名][Enter] [メール本文][Enter] .でメール本文終了 Cc [CCするメールアドレス] mail -s 件名 -c CCアドレス -b BCCアドレス メールを読む mail -f mailboxのファイル名 mail -u ユーザ名 *** メールスプール /var/spool/mail 配下にユーザ毎にできるファイルのことです。 中身はそのまま生データが入っているので読むことができる。 *** cronの設定 (クーロン) crontab -l 一覧 crontab -e 編集 分・時・日・月・曜 コマンド 引数 例:毎日午前1時0分に実行する) 0 1 * * * /usr/local/bin/php /home/juen/web/cron/pc_notice.php crontab のエディタをviにする(Solaris) EDITOR=vi *** 環境変数の登録 bash export [A]=[B] 例) export PATH=/bin /usr/bin /usr/local/bin tcsh/csh setenv [A] [B] 現在登録されている環境変数の確認は env *** ファイルの暗号化 ①gpg(共通鍵暗号化) 暗号化: gpg -c [ファイル名] ※パスフレーズを2回入力 暗号化されると、ファイル名の後ろに.gpgという拡張子が付く 複合化: gpg [暗号化済みファイル(*.gpg)] ※暗号化した際のパスフレーズを入力 ※暗号化すると、若干圧縮がかかるためファイルサイズが減少する。 ◆apache でパスワードを付けてWebページに認証させたい htpasswd -c パスワードファイル 認証ユーザ名 認証させたいページのファイルがあるディレクトリに.htaccessファイルを作成し、下記のようにする # パスワード認証 AuthUserFile /etc/.htpasswd AuthGroupFile /dev/null AuthName "Please enter username and password" AuthType Basic require valid-user *** ファイルのダウンロード (wget ダブルゲット) wget [URL] wget http //www.yahoo.co.jp/ Proxyを経由しなければならない場合、 /etc/wgetrcを編集して proxyの部分を経由するproxyに書き換える か、環境変数に入れる export http_proxy="http //hoge.ne.jp 8080/" カレントディレクトリにファイルがダウンロードされる --no-proxy とするとproxyを経由しない *** RPM RedHat用のパッケージ管理 オプション -e 削除 -i インストール -F インストール済みであれば更新 -U アップデート -h インストール・アップデート中に進捗バーを表示する -v 処理内容を詳細に表示する --nodeps 依存関係を無視する :困ったときにのみ使うこと --force 処理を強制する --test 処理のテストのみ行い、実際の処理は行わない --quiet 処理中に何も表示しない --initdb RPM用のデータベースを初期化 --rebuilddb RPM用のデータベースを作り直す --version RPMコマンドのバージョンを表示 インストール済みパッケージの確認 rpm -qa | grep [パッケージ名] 例) rpm -qa | grep "apache" パッケージの削除 rpm -e [パッケージ名] パッケージのインストール rpm -ivh [*.rpm] パッケージの更新 rpm -Uvh [*.rpm] 該当するパッケージがインストールされていれば更新を行う rpm -Fvh [*.rpm] ソースパッケージからRPMを作成する場合 rpmbuild --rebuild --target=i686 [パッケージ] RPMを作成する場合 rpm -ba [SPECファイル] *** apt (あぷと) aptの設定 /etc/apt/apt.conf ソースリストはここを編集/ etc/apt/source.list リスト更新 apt-get update インストール apt-get install [パッケージ名] アップグレード apt-get upgrade ディストリ全体をアップグレード apt-get dist-upgrade HTTPプロキシを経由する場合はapt.confに設定を書くか、 http_proxy環境変数に入れる。 http_proxy="http //hoge.ne.jp 8080" export http_proxy ***yum (やむ) *** patch当て (patch パッチ) 対象と1階層下のフォルダ階層でパッチを実行 patch -p1 [filename.patch] 対象と同じフォルダ階層でパッチを実行 patch -p0 [filename.patch] *** 差分を取る テキストファイル1と2の差分を取る diff ファイル1 ファイル2 2ソースファイルの差分からパッチファイルを作成するには diff -c ファイル1 ファイル2 hoge.patch *** PostgreSQL (ポスグレ/ポストグレス) PostgreSQLの起動 pg_ctl -o "オプション" start -o "オプション"は省略可能 PostgreSQLの終了 pg_ctl stop PostgreSQLの再起動 pg_ctl restart どうしても終了しないとき pg_ctl -m immediate stop DB一覧 psql -h [サーバのホスト or IP(ローカルの場合省略可)] -p [ポート番号(省略可)] -l データベースのダンプ(エクスポート)作成 pg_dump -U [DB接続ユーザ] [DB名] [ダンプファイル名] または pg_dump -U [DB接続ユーザ] [DB名] -f [ダンプファイル名] テーブルのみをダンプする (INSERT形式で) pg_dump -U [DB接続ユーザ] -D -t [テーブル名] [DB名] [ダンプファイル名] または pg_dump -U [DB接続ユーザ] -D -t [テーブル名] [DB名] -f [ダンプファイル名] Ex) pg_dump -U school01 -D -t base_sco_mast school base_sco_mast.sql すべてのデータベースをダンプする pg_dumpall -c -U [DB接続ユーザ] [ダンプファイル名] ※-c を付けると、復元する際に重複キーを作成させないように一旦DELETEするSQLを作成する。 インポート または SQL実行 psql -e -U [DB接続ユーザ] [DB名] [SQLファイル名] SQLを実行させる psql -U [DB接続ユーザ] [DB名] [sqlファイル名] or psql -U [DB接続ユーザ] [DB名] -c "sql文" SQLの内容をファイルに書き出す(応用) psql -U [DB接続ユーザ] [DB名] -c "sql文" [ファイル名] CSV形式のデータをインポートする(応用) psql -U [DB接続ユーザ] [DB名] -c "COPY [テーブル名] FROM CSVファイル名 " CSV形式でデータをエクスポートする psql -U [DB接続ユーザ] [DB名] -c "\COPY enq_area_mast TO /home/postgres/itou/enq_area_mast.csv USING DELIMITERS , " DB最適化 vacuumdb -f -z -f -z を付けない場合、簡易vacuum すべてのDB最適化(時間がかかる) vacuumdb -a -f -z *** MySQL (マイエスキューエル) mysql -h [ホスト名] -p[パスワード] *** Telnet (telnet テルネット) telnet [接続先IP or ホスト名] [ポート番号] HTTPの確認 telnet localhost 80 head / get / SMTP (メール送信) telnet localhost 25 HELO ホスト名 MAIL FROM 送信元のアドレスを入力 RCPT TO 宛先のアドレス DATA 354 Enter mail, end with "." on a line by itself From 送信元アドレス Subjet メールタイトル メッセージ . QUIT POP3 (メール受信) telnet localhost 110 USER xxxxx PASS yyyyy STAT LIST QUIT *** telnet時のログインメッセージ Linux vi /etc/issue.net 好きなメッセージを入力 Solaris ↓無い場合は作成する vi /etc/default/telnetd ↓入力する BANNER="メッセージ" *** ログイン後のメッセージ /etc/motd を編集する。 *** bashログインしたときのみ表示 /etc/bashrc か、 ~/.bashrcの末尾に echo "メッセージ" を加える *** ポートスキャン(Linux) nmap [ホスト or IP] *** TCPデータを覗く tcpdump 詳しくはweb検索して調べて。 *** プロセス管理 特定のプロセスを再起動させる ps コマンドでプロセス番号を確認し、 kill -HUP [プロセス番号] 応用例) kill -HUP `cat /var/log/squid/squid.pid` プロセスの終了 kill [プロセス番号] [プロセス番号]... プロセスの強制終了(どうしても終了しない場合) kill -KILL [プロセス番号] *** OSのバージョンを確認 cat /etc/issue ※ただのテキストファイルなので書き換えられていると違うことがある。 *** カーネルのバージョンを確認 cat /proc/version または uname -a *** CPU情報を確認する方法 cat /proc/cpuinfo *** サーバのメモリ情報を確認する方法 Linux cat /proc/meminfo Solaris prtconf | grep Mem *** 現在ログイン中のユーザを調査 who もしくは w *** ログイン履歴を調査 Solaris last [ユーザID] *** パーティションの管理 Linux fdisk [デバイス名] 例) fdisk /dev/hda fdiskに入ったときのコマンド m ヘルプ p パーティション一覧 d パーティション削除 n パーティション作成 t パーティションの種類変更 a パーティションのアクティブ化 w 設定をディスクに書き込んで終了 q 設定を保存しないで終了 ※[注意]fdiskはハードディスクの中身を変更するので 間違って設定した場合、データが読めなくなります。 *** パーティションのフォーマット mkfs -t [フォーマット] [デバイス] *** ディスクのチェック Windowsで言うところの、スキャンディスクのことです。 システム起動時のディスクチェックでエラーが出たときに行います。 シングルユーザモードで下記のコマンドを行います fsck [オプション] [デバイス] オプション -p 有無を言わさず自動修復 -n チェックしても実際の修復はしない -c 不良ブロックのチェック -f ファイルシステムの状態が正常でもチェックを強制する -v 動作の詳細な内容を表示する 例) fsck -p /dev/hda1 fsck -p /dev/hda2 *** ディスクのマウント mount -o [オプション,..] -t [ファイルシステム] [デバイスパス] [マウント先のパス] ※予め、マウント先のディレクトリを作成しておくこと。 例) mount -o noatime /dev/hda /home フロッピーをマウント mount -t vfat /dev/fd0 /mnt/floppy USBメモリをマウント(SCSIデバイスとして認識される) mount -t vfat /dev/sda1 /mnt/floppy CDROMをマウント mount -t iso9660 /dev/cdrom /mnt/cdrom 現在のマウント状態を確認(Solaris) mount -p 現在のマウント状態を確認(Linux) mount マウントの解除 umount [デバイス] or [マウント先] CDROMの取り出し eject [デバイス(省略可)] *** ドライブのコピー ※コピー元とコピー先のドライブの容量は同じであること! ドライブA→ドライブB dd if=/dev/hda of=/dev/hdb conv=sync,noerror *** パーティションのコピー ※予めコピー元のドライブとコピー先のドライブのパーティションを同じにしておく。 ドライブAのパーティション1→ドライブBのパーティション1 dd if=/dev/hda1 of=/dev/hdb1 conv=sync,noerror *** Linux 起動ディスクの作成 ※フロッピーはvfat で予めフォーマットしておく mkbootdisk `uname -r` *** bash 設定 .bashrc # set aliases alias ls= ls -Fh --color=auto alias df= df -h .bashrcを書き換えたら source ~/.bashrc で設定反映 Solarisでbash使う場合 /etc/bashrc を作成 # /etc/bashrc を作成する # vi /etc/bashrc # User Prompt PS1="\[\e[37;0m\][\u@\h]\\$\[\e[0m\] " USER=`/usr/xpg4/bin/id -un` export USER PROMPT_COMMAND= echo -ne "\033]0;${USER}@${HOSTNAME} ${PWD}\007" # このファイルを作成した後に、ユーザーのホームディレクトリに # .bash_profile をviで以下の内容を追加する # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # もう一つ.bashrc をviで以下の内容を追加する # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi *** XWindowを自動起動させないようにする(Linux) vi /etc/inittab level「5」⇒「3」に変更してOS再起動する *** 空きメモリ free -m -m MB単位で表示 -s [秒数]単位で表示を更新 *** ログ確認 起動プロセスのログを確認 dmesg もしくは less /var/log/messages *** SCSIカードのドライバが自動的にロードされないとき (/etc/modules.conf(kernel2.4)/etc/modprobe.conf(kernel2.6)にカード情報がかかれている にも関わらず、ドライバが組み込まれない場合) #手動でモジュールを組み込んでみる。 /sbin/insmod [モジュール名] /sbin/modprobe [モジュール名] 例) /sbin/modprobe aic7xxx scsi2 Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev 6.2.36 aic7880 Ultra Wide Channel A, SCSI Id=7, 16/253 SCBs blk queue f71af818, I/O limit 4095Mb (mask 0xffffffff) (scsi2 A 0) 20.000MB/s transfers (20.000MHz, offset 15) Vendor I-O DATA Model HDR-S160 Rev 112S Type Direct-Access ANSI SCSI revision 02 blk queue f71af618, I/O limit 4095Mb (mask 0xffffffff) Attached scsi disk sdc at scsi2, channel 0, id 0, lun 0 SCSI device sdc 312500160 512-byte hdwr sectors (160000 MB) sdc unknown partition table #正常に認識されれば、起動時に認識できるようにRAMDISKを作成し直す。 /sbin/mkinitrd -v -f /boot/initrd-[カーネルバージョン].img [カーネルバージョン] ※あとは、fdisk ⇒ mkfs ⇒ mount ⇒使用可能 FTP のバッチ化は可能か? FTP や Telnet といった対話型プログラムを自動化したい場合は、expect を使うとよい。 expect は、スクリプトに従って、他の対話型プログラムに "話しかける" プログラムであり、 プログラムから何を期待され、正しい応答が何であるべきかをスクリプトで記述することができる。 シェルスクリプトとは違って、プログラムとユーザの対話が必要なプログラムを実行するのに便利である。 以下は、とある Anonymous サイトから、ある特定のファイルを受信する例。 #!/usr/bin/expect set anonymous-ftp.site.hoge set email mymail-address@mydomain.hoge spawn ftp $site expect "*ame* " { send "anonymous\n" } expect "assword " { send "$email\n" } expect "* " { send "cd pub/RFC\n" } expect "* " { send "ascii\n" } expect "* " { send "hash\n" } expect "* " { send "get rfc-index.txt\n" } expect "* " { send "quit\n" } send_user "script end\n" close exit 0 *** Windows XPの場合 Telnet Microsoft Telnet set ?……セット・コマンドのヘルプ bsasdel BackSpace を Del として送信します crlf ニューライン モード - リターン キーで CR および LF を送信します delasbs Del を BackSpace として送信します escape x telnet クライアント プロンプトで x をエスケープ文字として 入力します localecho ローカル エコーを使用します logfile x x は現在のクライアント ログ ファイルです logging ログを有効にします mode x x には console または stream が入ります ntlm NTLM 認証を使用します term x (x には ansi, vt100, vt52, または vtnt が入ります) codeset x (x には Shift JIS, Japanese EUC, JIS Kanji, JIS Kanji(78), DEC Kanji または NEC Kanji が入ります) Microsoft Telnet set localecho……ローカル・エコーをオンにする ローカル エコー オン……有効になった Microsoft Telnet unset localecho……ローカル・エコーをオフにする ローカル エコー オフ ……無効になった ◆telnet 接続のタイムアウトを無効にする サーバ側で設定する。 unset autologout *** iptablesによるポートフォワード(VNCなどで活用) iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.86.41.9 --dport 5800 -j REDIRECT --to 5800 iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.86.41.9 --dport 5900 -j REDIRECT --to 5900 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5800 -j DNAT --to-destination 10.86.41.9 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5900 -j DNAT --to-destination 10.86.41.9 ↓リダイレクト iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.24.99 --dport 80 -j REDIRECT --to 80 ↓フォワード iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.24.99 # ssh でパスワードなし認証させる(イントラ内ならまだOKだが公開サーバでは超危険!) ①接続元(クライアント)での設定 ssh-keygen -t rsa 何も入力せずにエンターキーを三回押す ②接続先(サーバ)のssh設定を変更する chkconfig sshd on vi /etc/ssh/sshd_config #-------------------------------- ここから #rootを許可する場合は PermitRootLogin yes # RSA 公開鍵認証を有効にする RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # ノーパスワード認証させる PasswordAuthentication yes PermitEmptyPasswords yes #-------------------------------- ここまで #終わったらsshd を再起動 service sshd restart ③接続元のrsa共有鍵を接続先サーバへ転送する cat .ssh/id_rsa.pub | ssh root@fsv "mkdir -p .ssh chmod 700 .ssh cat .ssh/authorized_keys chmod 600 .ssh/authorized_keys" ④接続元からsshで接続先のサーバへログインできるか確認 ssh user@servername で認証なしで入れるか確認する *** postfix メールキューを削除 http //city.hokkai.or.jp/~hachikun/PostfixQueueDelete.html ◆xinet制御のタイムアウト設定?(Web上のサイトから引用) xinetd.confの設定 /etc/xinetd.confには、各サービスに共通の設定をします。 defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST RECORD } includedir /etc/xinetd.d 基本的には、/etc/xinetd.confの設定はデフォルトのままで構いませんが、 DoS対策として、サービスプロセスへのアクセスタイムアウト秒数である instanceをより小さな値に設定することもできます。 この値を変更すると、 xinetdから起動される全てのサービスプロセスのアクセスタイムアウト秒数 が変更されます。 ただし、あまり小さな値に設定すると、 提供すべきサービスもネットワーク の負荷などが原因で正常に接続できなくなる可能性が出てきますので、 ネットワークの負荷とDoSの境界をどこに設定するか等を考えてから変更して 下さい。 ◆PostgreSQLの接続状態を確認する。 SELECT COUNT(*) FROM pg_stat_activity; *** RAMディスクのようにメモリを使う。 mount -t tmpfs -o size=10m tmpfs /dev/shm mount -t tmpfs -o size=10m /dev/shm /hoge *** プロセスの優先度を変更したい renice [優先度] [PID] -19 が最優先 20 が最低。 *** リソース制限をかける ulimitを使います。 -a 制限を表示 -m メモリ -v 仮想メモリ -u 1人のユーザが利用可能なプロセス数 -t cpu時間 ◆テキストファイルの特定の文字列を一括置換したい perl -p -i.bak -e s/nobody/apache/g */ini/dbconst.ini 上記では、dbconst.iniのnobodyという文字列を全てapacheに置換し、 変更前のファイルはファイル名に.bakを付けてバックアップされる。 ◆WindowsからLinuxへファイル転送したいんだけど? Linux側でFTPが使用できなくて接続できないです... この場合にファイル転送したいんだけど...どうしたらいい? SSHが使用できれば、WinSCPと言うソフトをWindows側にインストールすれば ファイルの転送を行うことが出来ます。 ◆SSHでrootでログインしたいんだけど? RedHatES 4,5では標準でrootでログインすることが可能です。 TurboやVineでは禁止されているようですので、 次のファイルをrootユーザでviで書き換える vi /etc/ssh/sshd_config 下記の項目を追加する PermitRootLogin yes 書き込んで終了したら service sshd restart で、sshdを再起動させる。 以上でrootでログイン可能になる。これはセキュリティ的にはマズイので 正式運用時は止めること。
https://w.atwiki.jp/gogolinux/pages/12.html
linux kernelのソースを読む